我正在尝试创建一个必须满足的条件,然后才能将对象保存到数据库中。我有表 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: None >" needs to have a value for field "foo" before this many-to-many relationship can be used.
我猜它希望在我进行此比较之前将其保存,但重点是不要在此条件为真之前将其保存到数据库。如何正确执行?
最佳答案
模型 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
关于django - 检查选定的多对多关系字段是否不相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30936652/