【问题标题】:How to return fields of both related models in a Django ManyToMany relation?如何在 Django ManyToMany 关系中返回两个相关模型的字段?
【发布时间】:2019-05-26 15:46:11
【问题描述】:

我有两个模型:

class P(mdoels.Model):
    name = models.CharField(null=False,max_length=120)
    ...

class F(mdoels.Model):
    name = models.CharField(null=False,max_length=120)
    ...
    p = models.ManyToManyField(P)

我需要这样的查询:

SELECT p.name, f.name
FROM f
JOIN f_p ON f.id = f_p.f_id
JOIN p ON p.id= f_p.p_id

我可以使用f.objects.filter(),但它不会返回p 的字段,我只需要显示一个包含这两个名称的列表。

psql 中,查询按我的需要工作。我如何在 Django 中做到这一点?

【问题讨论】:

    标签: python django django-models many-to-many


    【解决方案1】:

    试试values_listdocs

    F.objects.values_list('name', 'p__name')
    

    【讨论】:

    • 此解决方案有效。在我的代码中,我使用了P.objects.values()。谢谢。
    • @EduardoStefanello 如果对您有用,请点赞
    【解决方案2】:

    使用prefetch_related:

    F.objects.filter(...).prefetch_related('p')
    

    【讨论】:

    • 我已经尝试过了,但我无法在结果QuerySet 中访问P 的字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2018-04-14
    • 1970-01-01
    相关资源
    最近更新 更多