你不能不离开页面直接在 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
方法。或者创建一个自定义字段类型,该类型知道如何在其方法中将 BibTeX 解析为类似于字典的东西to_python
,但这有点高级。
当然,您的管理员可能还需要其他设置。