【问题标题】:Django select one row from related model setDjango 从相关模型集中选择一行
【发布时间】:2017-04-16 23:48:33
【问题描述】:

比方说,我在 models.py 中有以下模型配置:

class ModelA(models.Model):
    columnA = models.ForeignKey(ModelZ)
    created = models.DateTimeField(auto_now_add=True)

class ModelB(models.Model):
    columnB = models.ForeignKey(ModelA, related_name='modelsets')
    is_open = models.BooleanField()
    created = models.DateTimeField(auto_now_add=True)

我知道我可以使用 prefetch_related 操作选择所有 ModelA 对象和所有相关 ModelB 对象。但在我的用例中,我想从 ModelA 中选择所有对象,并从满足特定条件的 ModelB 对象中选择一个(或一些)相关行。

例如:

ModelA.objects.prefetch_related('modelB_set') 其中 modelB__is_open = True 类似的东西。

预期的输出是:

[{
    columnA : 1
    created : 'time'
    modelsets :[{
        columnB : 1
        is_open = True
        created = 'time'
    },{
        columnB : 2
        is_open = True
        created = 'time'
    }

},{
    columnA : 2
    created : 'time'
    modelsets :[{
        columnB : 3
        is_open = True
        created = 'time'
    }    
}]

我已经厌倦了在谷歌上搜索这个,任何有助于更好地理解 Django ORM 查询的链接都会非常有用。谢谢!

【问题讨论】:

    标签: python django django-models django-rest-framework


    【解决方案1】:

    尝试使用Prefetch()对象

    queryset_b = Model_B.objects.filter(is_open=True)
    result=Model_A.objects.prefetch_related(Prefetch('modelsets', queryset=queryset_b))
    

    【讨论】:

    • 我试过用这个。但它说 在 ModelA 对象上找不到 'modelB_set','modelB_set' 是 prefetch_related() 的无效参数。我应该在 Models.py 中做些什么来反映这一点吗?
    • @nithinks 哦,你正在使用related_name,然后试试这个:Prefetch('modelsets', queryset=queryset_b)
    • 这有帮助。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多