在Django模型中循环ManyToMany字段

1 投票
1 回答
3650 浏览
提问于 2025-04-17 08:12

我有一个这样的模型:

class MyProfile(models.Model):
      club = models.ManyToManyField(Club, default=None)
      city = models.ManyToManyField(City, default=None)
      .
      .

在视图中:

user = User.objects.get(pk=id)
profile = MyProfile.objects.select_related().get(user=user)

比如说,使用 profile.club.select_related() 我可以找到用户的俱乐部。但是我想在循环中这样做。

fileds = [car, club]
for f in fileds:
        print getattr(profile, f)

输出中我得到了 <django.db.models.fields.related.ManyRelatedManager object at 0x9876545>,但是通过 profile.club.select_related() 我可以获取到用户的俱乐部名称。我不能在循环中使用这个查询。有办法对模型字段的列表使用这样的查询吗?

提前谢谢你!

1 个回答

6

这些字段和MyProfile类中的“对象”字段是一样的。这里加上了.all(),然后把结果转换成列表。

fields = [car, club]
for f in fields:
    z = getattr(profile, f)
    print list(z.all())

撰写回答