gpt4 book ai didi

django - 检查选定的多对多关系字段是否不相交

转载 作者:行者123 更新时间:2023-12-02 03:24:55 25 4
gpt4 key购买 nike

我正在尝试创建一个必须满足的条件,然后才能将对象保存到数据库中。我有表 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com