1

オーバーライドされた save メソッドを使用して管理フォームを作成します。

*models.py
class Banners(models.Model):
    <...>
    pages = models.ManyToManyField(Page, verbose_name='Pages', blank=True)

*forms.py
class BannerAdminForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(BannerAdminForm, self).__init__(*args, **kwargs)
        self.fields['pages'].queryset = Page.objects.filter(publisher_is_draft=1)

    def save(self, force_insert=False, force_update=False, commit=True, *args, **kwargs):
        banner = super(BannerAdminForm, self).save(commit=False, *args, **kwargs)

        for c in banner.pages.all():
            print c

        if commit:
            banner.save()
        return banner

    class Meta:
        model = Banners

バナーに追加されるページをインターセプトし、ユーザーが選択したページに応じていくつかの余分なページを追加したいので、save()メソッドをオーバーライドしました。したがって、どのページオブジェクトが選択されたかをキャッチする必要があります...しかし、banner.pages.all() の c のコード:新しいページではなく、バナーに既に存在するページを返します。フォームを保存する前に新しい値をキャッチする方法があれば?

そして 2 番目の質問 - いくつかの新しいページが来て、いくつかの古いページが同時に削除された場合... そのすべてのデータをキャッチする同じメカニズムがあるでしょうか?

4

1 に答える 1