我试图在将对象保存到数据库之前创建一个必须满足的条件。我有表A和表B,A与B有2个独立的多对多关系。我试图在保存条目之前检查这些字段被视为集合的条件是否是不相交的。
以下是一些代码:
class Foo(models.Model):
first = models.ManyToManyField(Bar, related_name='first')
second = models.ManyToManyField(Bar, related_name='second')
def save(self):
if (set(self.first.all()).isdisjoint(list(self.second.all()))):
#save
else:
#raise exception
但我收到错误
"< Foo:没有>"需要有一个领域的价值" foo"在此之前可以使用多对多关系。
我猜测它希望在我进行此比较之前将其保存,但重点是在此条件为真之前不将其保存到数据库。怎么做得好?
答案 0 :(得分:1)
模型save
方法无法访问m2m相关字段,因为它们在它们之前被调用。如果您想验证它们,那么您应该为FooAdmin
类定义一个自定义模型表单(我想您正在使用django admin)并在那里进行验证。
class FooForm(forms.ModelForm):
class Meta:
model = Foo
exclude = ()
def clean():
cd = self.cleaned_data
first_objects = cd['first']
second_objects = cd['second']
# your logic
return super(FooForm, self).clean()
class FooAdmin(admin.ModelAdmin):
form = FooForm