python - 基于最大子属性的排序模型(具有潜在联系) - Django
问题描述
我想Docket
根据最新的文档(子对象)对我的对象进行排序。通常有几个文档具有相同的date_filed
. 根据教程,我尝试排序-documents__date_filed
并且它有点工作。因为有多个文档具有完全相同的日期,所以我的 ListView 显示 2-3 重复行(每个日期关系一个)。如何避免获得重复的结果,并且输出中的每个 Docket 只保留一行?
class Docket(models.Model):
name = models.CharField(max_length=200)
class Meta:
ordering = ['-documents__date_filed', Func(F('name'), function='LOWER')]
class Document(models.Model):
docket = models.ForeignKey(Docket, on_delete=models.CASCADE, related_name="documents")
date_filed = models.DateTimeField(default=timezone.now)
解决方案
ListView
如果它包含相关模型,则在其本身中进行排序可能会更好,因为现在几乎所有Docker.objects.all()
查询集都会有重复。
您可以使用.distinct()
[Django-doc]检索Docket
对象的查询集,其中相同的对象只出现一次:
from django.views.generic import ListView
from django.db.models.functions import Lower
class DocketListView(ListView):
model = Docket
queryset = Docket.objects.order_by(
'-documents__date_filed',
Lower('name')
).distinct()
推荐阅读
- php - 在注册表单中添加的额外字段将保存在 wp_users 表中,而不是 wp_usermeta 表(WooCommerce)
- r - 如何在 R 中正确使用 read.table 与该数据库?
- typescript - 如何传递嵌套类以输入@ApiOkResponse 或创建适当的自定义装饰器?
- sql - 为什么不能删除角色,因为某些对象依赖于它
- python - 为什么 send_keys() 方法不起作用。`元素不可交互`
- python - Python - 将特定文件从子文件夹复制到目标,从文本文件中获取文件名
- android - NestedScrolling 不适用于 gridView
- javascript - 递归加密以“id”或“_id”结尾的属性
- angular - 在 aws ec2(ubuntu)上部署时,Angular Route 不起作用
- python - 无法在 Python 中获取绝对路径