【发布时间】:2019-06-23 18:58:28
【问题描述】:
我在同一个应用中有 2 个不同的模型
class Book(models.Model):
title = models.CharField(max_length=250, unique=True)
slug = models.SlugField(max_length=50)
description = models.TextField(max_length=500)
class Chapter(models.Model):
book = models.ForeignKey(Book,on_delete=models.CASCADE)
num = models.PositiveIntegerField(verbose_name="Chapter Number")
rdate = models.DateTimeField(verbose_name="Release Date", default=timezone.now)
我想要做的是按发布日期降序排列所有书籍rdate
我尝试的是:
Book.objects.all().order_by('-chapter__rdate').distinct()
结果中发现了一些重复,我只添加了 2 本书,所以只有 1 本书被重复。结果是这样的:Book1,Book2,Book2
我已经看到来自here 的注释,并且我正在使用 SQLite。 通过使用 values(),我将无法调用 get_absolute_url() 和我想调用的其他一些方法,因此使用 values() 是不可能的。
接下来我尝试像这样将 Chapter rdate 注释到 Book 查询中
Book.objects.all().annotate(bdate=ExpressionWrapper(F('chapter__rdate'), output_field=DateTimeField())).order_by('-bdate').distinct()
仍然以相同的结果结束。我完全迷路了,请需要帮助。我现在可能不会更改为 PostgreSQL,但我可能会在部署应用程序时使用它,所以如果可能的话,我想要 SQLite 版本和 PostgreSQL 版本的解决方案。 SQLite 解决方案对我来说是绝对必要的,因为它很容易在开发中使用。
【问题讨论】:
标签: django django-queryset django-orm