繁体   English   中英

从Django中的文本字段填充管理表单

[英]Populate admin form from a text field in Django

我正在尝试为表示学术论文的模型自定义Django admin编辑页面,以便有一个文本框可以作为模型中实际信息的``快捷方式''进行填充(基于BibTeX的书目) 。 也就是说,用户不必繁琐地填写“出版物”模型中的每个字段,而是可以简单地复制/粘贴BibTeX条目,单击按钮并自动填写相关字段。

通过编辑模板,我设法创建了一个不代表模型一部分的文本框和按钮,但是我无法弄清楚如何使按钮在不离开页面的情况下执行任何操作,因为我无法覆盖风景。 我希望它填充表单的字段,但要保留在同一页面上,以便用户可以查看和编辑所解析的内容。

我将如何制作一个在Django管理员中动态填写表单的按钮?

抱歉,如果有一个超级简单的解决方案-我的团队和我是Django的新手!

您不能在Django中直接完成此操作,而无需离开页面,或者至少提交并重新显示它。 如果严格限制不提交表单,则可以使用Javascript解析文本框的上下文并将其分配给您的admin输入字段。

就是说,我将通过为我的admin类定义表单,然后专门化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解析为类似字典的内容,但这要先进一些。

当然,您可能还需要管理员设置其他设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM