检查选定的多对多关系字段是否不相交
Checking if selected many-to-many relation fields are disjoint
我正在尝试创建一个必须满足的条件,然后才能将对象保存到数据库中。我有 table A 和 table 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.
我猜它希望在我进行此比较之前将其保存,但重点是在该条件为真之前不将其保存到数据库。如何正确操作?
Model save
方法无法访问 m2m 相关字段,因为它在它们之前被调用。如果你想验证它们,那么你应该为你的 FooAdmin
class 定义一个自定义模型表单(我想你正在使用 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
我正在尝试创建一个必须满足的条件,然后才能将对象保存到数据库中。我有 table A 和 table 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.
我猜它希望在我进行此比较之前将其保存,但重点是在该条件为真之前不将其保存到数据库。如何正确操作?
Model save
方法无法访问 m2m 相关字段,因为它在它们之前被调用。如果你想验证它们,那么你应该为你的 FooAdmin
class 定义一个自定义模型表单(我想你正在使用 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