保存時にユーザーが特定のオプションを選択した場合、ユーザーをページに連れて行き、そこでもう1つのフィールドに入力してから、管理者のデフォルトページにリダイレクトしたい
1 に答える
1
新しいページにリダイレクトするのではなく、作成ページと更新ページが使用するフォームを単純にオーバーライドできます。これにより、すべてのフォーム処理を 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)
フォーム.py
from django import forms
class BookAdminForm(forms.ModelForm):
additional_field = forms.CharField(max_length=100)
class Meta:
model = Book
次に、save メソッドをオーバーライドして、「特定のオプション」が選択されているかどうかを確認し、余分なフィールドを適切に処理する必要があります。クラス内では、次のようなものが必要になります。
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 でメソッドをオーバーライドするsave_model()
こともできます。
于 2009-05-21T06:45:10.100 に答える