Django:返回布尔值,无论ManyToManyField中是否存在值



我有两个模型ModelA和ModelB。

class ModelA(models.Model):
field1 = models.CharField(max_length=100)
def __str__(self):
return self.field1
Class ModelB(models.Model):
name = models.CharField(max_length=100)
dogs  = models.ManyToManyField(ModelA)

我想在django视图中检查ModelB的对象"o"是否已经具有字段"dogs"的一些值。

例如,如果存在ModelB的对象"o",其字段"name"的值为"Ankit",字段"dogs"的值则为["Abra"、"Rottweiler"one_answers"Pug"]。我想检查一下o.dogs是否有"拉布拉"。我怎样才能做到这一点?由于"dogs"字段是ManyToMany字段,所以当我使用时

ModelB.objects.all().values('dogs')

我得到的结果如下:

<QuerySet [{'dogs': 1}, {'dogs': 2}, {'dogs': 3}]> 

我不知道如何从这里开始。

dogs_list = ['Labra' , 'Rottweiler', 'Pug']
ModelB.objects.filter(dogs__multivalues__in=dogs_list).exists()

如果存在则返回True,如果不存在则返回False。如果你想检查特定的狗,你可以做:

dog_name = 'Labra'
ModelB.objects.filter(dogs__multivalues=dog_name).exists()

多对多字段与查询集相关联,该查询集公开普通的Query API。因此,如果您有一个ModelB对象o,并且您想检查其dogs字段中的特定名称,您可以执行以下操作:

o.dogs.filter(multivalues='Labra')

(不过,我不确定为什么这个字段被称为"多值"。它里面有多个值吗?如果有,为什么-多元素功能已经由多对多字段提供了。(

编辑

要检查字段是否包含值,请使用__contains过滤器:

o.dogs.filter(multivalues__contains='Labra')

但实际上,正如我所说,你不应该在一个字段中有多个值;这就是m2m关系的意义所在。

相关内容

  • 没有找到相关文章

最新更新