Django order_by相关集

标签 django sql-order-by

我为客户提供了一个模型,为他们的购买/订单提供了一个模型。在我们的后端/网络管理员中,我们希望能够按客户的最新订单对客户列表进行排序。

这基本上是我们的模型的样子

class Customer(models.Model):
    username = models.CharField(max_length=32)
    first_name = models.CharField(max_length=322)
    def __unicode__(self):
        return "%s" % self.username
    def get_last_order_date(self):
        self.order_set.latest('purchase_date')

class Order(models.Model):
    customer = models.ForeignKey(Customer)
    purchase_date = models.DateTimeField()

我可以使用get_last_order_date函数显示每个客户的最新订单,但是无法按该函数排序(或者至少我不知道如何排序)。我已经尝试了所有我能想到的:
.order_by('order__purchase_date')
.order_by('order__set').latest('purchase_date')

还有很多没有运气的。

任何提示或线索将不胜感激。

谢谢。

最佳答案

您不能通过函数使用order by,因为它是在数据库级别完成的。您可以使用手动对queryset进行排序。 sort(key=get_last_order_date),但这不是很有效。

更好的方法是使用Django的汇总功能,以获取客户的最大购买日期并进行排序:

from django.db.models import Max
Customer.objects.annotate(latest_order=Max('order__purchase_date')).order_by('latest_order')

关于Django order_by相关集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175364/

相关文章:

python - Django数据库连接错误: "sqlite3.OperationalError: unable to open database file"

sql-server - 为什么 SQL 子查询中的 order by 受到限制?

sql - Heroku PostgreSQL 按字母顺序排列

mysql - 查询按 aplhabetic 顺序检索记录,除了必须在顶部的 n 个预定义项目

python - 导入错误 : No module named memcache (Django project)

Django 管理 get_FOO_display

php - Json_encode 改变我查询的顺序

PHP, MySQL select, order by field and group it

python - 如何通过 Client.post() 从 Django 测试中的表单上传文件?

python - Django 测试客户端和子域