如何检查ManyToMany字段是否为空?

20

如何检查与我的模型对象相关的任何多对多字段对象?

例如,我有一个模型:

class Category(models.Model):
    related_categories = models.ManyToManyField('self', blank=True)

只有存在相关对象时,我才想做某事:

if example_category.related_categories:
    do_something()

我尝试了 example_category.related_categories, example_category.related_categories.all(), example_category.related_categories.all().exists(), example_category.related_categories.count(),但是这些都对我没有用。

我没有任何其他条件进行筛选。

有没有什么简单的方法来检查这个字段是否为空?


如果你这样做会发生什么,这看起来是正确的解决方案。但请注意,这里的related_categories对称的。这意味着如果ab相关联,则b也与a相关联。 - Willem Van Onsem
4
在这里,.exists() 是正确的解决方案。 - Daniel Roseman
1
@WillemVanOnsem 看起来我的条件总是为真,即使没有相关的对象。空白参数可能会导致这种情况吗? - Dibidalidomba
@Dibidalidomba:不是这样的... blank 实际上对表单有影响。但是如前所述,如果您将 brelated_categories 添加 a,则意味着 arelated_categories 也不为空。 - Willem Van Onsem
1个回答

30

你应该使用.exists方法:

related_categories = example_category.related_categories
if related_categories.exists():
    # do something

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接