我有两个模型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关系的意义所在。