【问题标题】:Loop in ManyToMany Fields in django model在 Django 模型中的多对多字段中循环
【发布时间】:2011-12-12 12:03:28
【问题描述】:

我有一个这样的模型:

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() 我可以收到用户的俱乐部名称。我不能在循环中使用这个查询。有没有办法使用这样的查询来查询模型字段列表?

提前致谢

【问题讨论】:

  • 这不是我的问题。我不想在模板中显示查询。我想在装饰器中进行查询以在视图中使用。我想进行批量查询。
  • 这些问题解释了如何获取实际信息而不是 <django.db.models.fields.related.ManyRelatedManager object at 0x9876545>。无论在哪里,在视图中或在模板中。
  • @DrTyrsa ,请给出示例或链接以进行批量查询!在循环中我不能使用 profile.f.select_related() 。什么是正确的方法?
  • 你想得到什么结果?配置文件列表以及每个配置文件的汽车列表?还是别的什么?

标签: python django


【解决方案1】:

此字段与 MyProfile 类中的“对象”字段相同。添加 .all() 并将其转换为列表。

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

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 2021-11-27
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 2016-10-10
    • 2018-02-05
    • 2023-02-22
    相关资源
    最近更新 更多