从 Django 中的文本字段填充管理表单
Posted
技术标签:
【中文标题】从 Django 中的文本字段填充管理表单【英文标题】:Populate admin form from a text field in Django 【发布时间】:2013-06-22 19:40:16 【问题描述】:我正在尝试为代表学术论文的模型自定义 Django 管理编辑页面,以便有一个文本框可以作为模型中实际信息的“快捷方式”填写(基于 BibTeX 参考书目其中)。也就是说,用户无需繁琐地填写“Publication”模型中的每个字段,只需复制/粘贴 BibTeX 条目,单击按钮,即可自动填写相关字段。
我已经设法通过编辑模板创建了一个不代表模型一部分的文本框和按钮,但是我不知道如何在不离开页面的情况下使按钮执行任何操作,因为我可以'不要覆盖视图。我希望它填充表单的字段但保持在同一页面上,以便用户可以查看和编辑解析的内容。
我将如何在 Django 管理中创建一个动态填写表单的按钮?
如果有一个超级简单的解决方案,我很抱歉——我和我的团队是 Django 的新手!
【问题讨论】:
【参考方案1】:如果不离开页面,或者至少提交并重新显示它,您不能直接在 Django 中执行此操作。如果您对不提交表单有严格要求,您可以使用 javascript 解析文本框的上下文并将它们分配给您的管理员输入字段。
也就是说,我会通过为我的管理类定义表单,然后专门化 save_model
方法来做到这一点。像这样的:
class PublicationAdminForm(forms.ModelForm):
class Meta:
model = Publication
bibtex_entry = forms.CharField(widget=forms.Textarea)
class PublicationAdmin(admin.ModelAdmin):
form = PublicationAdminForm
def save_model(self, request, obj, form, change):
bibtex = form.cleaned_data['bibtex_entry']
values = parse_bibtex(bibtex)
obj.author = values['author']
# etc etc, or whatever format you want to use to represent the values you're pulling from the BibTeX entry
super(PublicationAdmin, self).save_model(request, obj, form, change)
显然 save_model 中的确切代码将取决于您如何从 BibTeX 条目中提取信息 - 我想演示在保存之前根据表单内容为对象分配属性值。
如果需要从 BibTeX 派生的字段,它会变得有点困难 - 您必须在表单上指定一个 clean
方法,该方法可以判断是否所有需要的值来自BibTeX 可以从提交的内容中派生出来。无论如何,这可能是一个好主意,尽管如果不需要这些字段,您可能希望将解析限制为表单的 clean_bibtex
方法。或者创建一个自定义字段类型,该类型知道如何在其to_python
方法中将 BibTeX 解析为类似于字典的内容,但这有点高级。
当然,您的管理员可能还需要其他设置。
【讨论】:
以上是关于从 Django 中的文本字段填充管理表单的主要内容,如果未能解决你的问题,请参考以下文章