Django - 按添加到 ManyToMany 字段的最后一个元素查询对象
Posted
技术标签:
【中文标题】Django - 按添加到 ManyToMany 字段的最后一个元素查询对象【英文标题】:Django - Query object by last element added to ManyToMany field 【发布时间】:2017-03-15 00:32:54 【问题描述】:我有这样的事情:
class Car(models.Model):
model = models.CharField(max_length=200)
brand = models.CharField(max_length=100)
status = models.ManyToMany(Status)
class Status(models.Model):
name = models.CharField(max_length=40)
date = models.DateTimeField('Status creation date')
例如,我如何查询其最后状态(最近)为REPAIRED
的所有汽车?这是否可以通过一个查询来实现?
【问题讨论】:
【参考方案1】:from django.db.models import Max
cars = Car.objects.annotate(Max('status__date')).filter(status__name='REPAIRED').distinct()
您可以阅读 Django examples 了解多对多关系。
【讨论】:
这是否只考虑最近的状态? 它似乎没有按预期工作。通过用最大日期注释每个结果,我仍然无法确定最新的是否已修复。 切换annotate
和filter
的顺序应该可以解决这个问题。更新以上是关于Django - 按添加到 ManyToMany 字段的最后一个元素查询对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Django Rest Framework 向 ManyToMany 字段添加数据?
使用 Django admin 时未保存 ManyToMany 字段
在 django 中向 QuerySet 添加 ManyToMany 额外字段
在 Django 的 ManyToMany 关系中按 id 添加对象