有一个带有覆盖保存方法的管理表单:
*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代码:返回横幅中已经存在的页面,而不是新页面。如果在我保存()表单之前有什么方法可以捕获新值?
第二个问题 - 如果同时出现一些新页面并删除一些旧页面......是否会有相同的机制来捕获所有这些数据?