1

モデルの実際の情報への「ショートカット」として入力できるテキストボックスがあるように、学術論文を表すモデルのDjango管理者編集ページをカスタマイズしようとしています(BibTeX参考文献に基づいて) . つまり、「Publication」モデルの各フィールドに面倒な入力をするのではなく、ユーザーは BibTeX エントリをコピーして貼り付け、ボタンをクリックするだけで、関連するフィールドに自動的に入力することができます。

テンプレートを編集して、モデルの一部を表さないテキスト ボックスとボタンを作成することができましたが、オーバーライドできないため、ページを離れずにボタンに何かをさせる方法がわかりません。景色。フォームのフィールドに入力するが、同じページにとどまって、ユーザーが解析されたものを見て編集できるようにしたい.

Django admin のフォームに動的に入力するボタンを作成するにはどうすればよいですか?

これに対する非常に簡単な解決策があれば申し訳ありません-私のチームと私はDjangoを初めて使用します!

4

1 に答える 1

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メソッドに制限することをお勧めします。または、メソッドで BibTeX を辞書のようなものに解析する方法を知っているカスタム フィールド タイプを作成しますto_pythonが、それはもう少し高度です。

もちろん、管理者に必要な設定は他にもあります。

于 2013-06-25T21:53:22.527 に答える