1

保存時にユーザーが特定のオプションを選択した場合、ユーザーをページに連れて行き、そこでもう1つのフィールドに入力してから、管理者のデフォルトページにリダイレクトしたい

4

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 に答える