在Django中查询多对多字段

0 投票
2 回答
913 浏览
提问于 2025-04-15 21:07

在模型中,有很多对多的字段,比如:

从 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

撰写回答