2009-05-21 14 views

答えて

0

をリダイレクトするのではなくあなたができる新しいページにリダイレクトする保存上のページの作成と更新は使用されます。これにより、モデルフォームにフィールドを追加し、すべてのフォーム処理を1か所で処理できます。

最初に、カスタムフォームを使用するようにModelAdminのを設定する必要があります:

admin.py

from django.contrib import admin 
from forms import BookAdminForm 
from models import Book 

class BookAdmin(admin.ModelAdmin): 
    form = BookAdminForm 

admin.site.register(Book, BookAdmin) 

forms.py

from django import forms 

class BookAdminForm(forms.ModelForm): 
    additional_field = forms.CharField(max_length=100) 

    class Meta: 
     model = Book 

次に、 override the save methodが必要です。「特定のオプション」が選択されているかどうかを確認して、余分なフィールドを処理します。ap自発的に

def save(self, *args, **kwargs): 
    if self.cleaned_data['certain_field'].value == 'certain option': 
     # process additional_field 
    # don't forget to call super to save the rest of the form 
    super(BookAdminForm, self).save(*arg, **kwargs) 

注:このコードはテストされていないが、それは正しい方向にあなたを指している必要がありますあなたのクラス内には、このようなものが必要になります。

ModelAdminのoverride the save_model()メソッドでも可能です。

+1

ユーザーのリダイレクトのような処理が必要な場合は、form.saveではなくadminクラスのsave_modelメソッドを上書きする方がよい場合があります。 –

+0

これは私が毎回追加のフィールドを表示しています。しかし、特定の条件があるときだけ表示されます。私はこれにjavascriptを使用していますが、変更したいです。 – ha22109

+0

あなたはdjangoの管理者の範囲を超えています。管理者の要点は、すぐに機能モデル管理者を即座に迎えることです。 JavaScriptのルートは悪い解決策ではありません。 – Soviut

関連する問題