从相关模型中删除由于按字段顺序排序的重复项
Removing duplicates due to order by fields from a related model
我在同一个应用程序中有 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 解决方案对我来说是绝对必要的,因为它在开发中很容易使用。
你可以试试这个
Chapter.objects.values('book__title').distinct()
这将 return 本书,其中至少有一章。
你应该像下面这样尝试:
Book.objects.all().order_by('-chapter__rdate').distinct('chapter__rdate')
这会给你一个不同的chapter_rdate
。
我试过之后成功了:
Book.objects.all().annotate(ch_date=Max('chapter__rdate')).order_by('-ch_date')
感谢大家的帮助。
我在同一个应用程序中有 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 解决方案对我来说是绝对必要的,因为它在开发中很容易使用。
你可以试试这个
Chapter.objects.values('book__title').distinct()
这将 return 本书,其中至少有一章。
你应该像下面这样尝试:
Book.objects.all().order_by('-chapter__rdate').distinct('chapter__rdate')
这会给你一个不同的chapter_rdate
。
我试过之后成功了:
Book.objects.all().annotate(ch_date=Max('chapter__rdate')).order_by('-ch_date')
感谢大家的帮助。