我有两个模型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”字段具有某些值。
例如,如果模型B的对象“ o”的字段“名称”的值为“ Ankit”,字段“ dogs”的值为['Labra','Rottweiler'和'Pug']。我想检查o.dogs是否具有“ Labra”。我怎样才能做到这一点?由于“ dogs”字段是ManyToMany字段,因此当我使用
ModelB.objects.all().values('dogs')
我得到的是以下结果:
<QuerySet [{'dogs': 1}, {'dogs': 2}, {'dogs': 3}]>
我不从这里开始。
答案 0 :(得分:0)
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()
答案 1 :(得分:0)
多对多字段与查询集相关联,该查询集公开了普通的查询API。因此,如果您有一个ModelB对象o
,并且想要检查其dogs
字段中的特定名称,则可以执行以下操作:
o.dogs.filter(multivalues='Labra')
(不过,我不确定为什么将该字段称为“多值”。它中是否包含多个值?如果是这样,为什么-多对多字段已经提供了多元素功能。)
修改
要检查字段是否包含值,请使用__contains
过滤器:
o.dogs.filter(multivalues__contains='Labra')
但是,正如我所说的,实际上,您不应该在一个字段中包含多个值;这就是m2m关系的目的。