【问题标题】:Django ordering by a foreign key fieldDjango按外键字段排序
【发布时间】:2019-03-12 10:21:44
【问题描述】:

我有以下两种型号:

class Project(models.Model):
    name = models.TexField()

class Item(models.Model):
    project = models.ForeignKey(Project,on_delete=models.CASCADE, related_name='project_item')
    name = models.TextField()
    available = models.FloatField()

所以我需要获取所有项目,但我希望它们是所有那些项目的 available 大于 0 的项目都应该首先出现。

我试过了:

list = Projects.objects.filter(**Some Fields**).order_by(available)

如何对这个列表进行排序?

【问题讨论】:

    标签: django python-3.x django-models


    【解决方案1】:

    您可以在排序子句中使用双下划线,如下所示:

    list = Projects.objects.filter(**Some Fields**).order_by('-item__available')
    

    这将按相关项目的可用字段降序排列项目。

    【讨论】:

    • 请展示您的完整、实际、模型。很明显,您发布的代码中缺少一些属性,例如 ForeignKey 需要 on_delete 属性;你是否也错过了related_name
    • 在这种情况下,您可以使用 order_by('-project_item__available') 进行排序
    • 这导致了数据复制,怎么加一个 distinct 子句,其实我是 Django 新手,从 Java 过渡过来的。
    • @Paras 只需将 distinct() 添加到末尾,如下所示: list = Projects.objects.filter(Some Fields).order_by('-item__available').distinct( )
    • distinct() 在这里没有用,因为 SQL 查询返回的行在技术上不是重复的,因为它们包含用于排序的唯一相关字段。请参阅 Django 文档中的 note under distinct()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2011-09-12
    • 1970-01-01
    • 2022-11-22
    • 2011-05-08
    • 2011-08-10
    • 2020-11-25
    相关资源
    最近更新 更多