在Django中查询多对多字段
在模型中,有很多对多的字段,比如:
从 emp.models 导入 Name
def info(request):
name = models.ManyToManyField(Name)
在 emp.models 中,结构是这样的:
class Name(models.Model):
name = models.CharField(max_length=512)
def __unicode__(self):
return self.name
现在,当我想查询一个特定的 ID,比如说:
info= info.objects.filter(id=a)
for i in info:
logging.debug(i.name) //gives an error
我该如何写查询才能获取到名字呢?
谢谢..
2 个回答
1
Lukasz说得对,不过我想让你知道,除非你用 info.object.filet(id__in=a)
这种方式,并且a是某种列表,否则根据id来筛选是没有意义的。如果你只想筛选一个单独的id,首先应该使用 objects.get(**kwargs),这样会直接返回那个特定的Info实例,而不是返回一个查询集(QuerySet)。
3
info.name
是一个 ManyToManyField
,这意味着如果你想获取与它相关的所有 Name
对象,你需要在它上面使用 .all()
方法。只有这样,你才能得到一个 Name
对象的列表(查询集):
info_list = info.objects.filter(id=a)
for info_object in info_list:
for name_object in info_object.name.all():
print name_object.name