ページを離れるか、少なくとも送信して再表示しない限り、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
が、それはもう少し高度です。
もちろん、管理者に必要な設定は他にもあります。