【问题标题】:Nested serializer ordering when there is no object没有对象时的嵌套序列化程序排序
【发布时间】:2015-12-22 07:47:15
【问题描述】:

我正在使用 drf 创建 API 视图,如下所示:

{
    "name": "some name",
    "attribute1": "some attribute",
    "attribute2": "some attribute",
    "attribute3": "some attribute",
    "attribute4": "some attribute",
    "stats": {
         "status": false,
         "count": 0
     }
}

stats 字段被创建为序列化程序(模型中的 OneToOneField),但有时在此 OneToOne 关系中没有关联对象,因此 statsnull

问题是我想通过 f.e. 订购我的查询集。 stats__count。这种排序的升序是有效的。 count = 0 在开头,空值在结尾,但是当我想按降序对其进行排序时,我希望在开头具有此属性的最大值。我得到了所有的空值。

问题是:如何将这些带有stats = null 的元素放在结果的末尾,或者至少将它们从查询集中删除(但仅在从stats 按字段排序时)。

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    最好的办法是使用这个 SO 问题中描述的 annotate():Django : Order by position ignoring NULL

    items = Item.objects.all().annotate(null_position=Count('position')).order_by('-null_position', 'position')
    

    【讨论】:

    • 我无法从查询集中删除它,因为它们也需要显示。我想要的是在订购时应该省略它们,
    • 啊好吧,那就看看这个问题:stackoverflow.com/questions/5235209/…
    • 看起来使用 annotate 可以满足您的需求。
    • 感谢成功,您可以编辑答案以便我接受 :)
    猜你喜欢
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多