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 了解多对多关系。

【讨论】:

这是否只考虑最近的状态? 它似乎没有按预期工作。通过用最大日期注释每个结果,我仍然无法确定最新的是否已修复。 切换annotatefilter 的顺序应该可以解决这个问题。更新

以上是关于Django - 按添加到 ManyToMany 字段的最后一个元素查询对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django Rest Framework 向 ManyToMany 字段添加数据?

使用 Django admin 时未保存 ManyToMany 字段

在 django 中向 QuerySet 添加 ManyToMany 额外字段

在 Django 的 ManyToMany 关系中按 id 添加对象

Django:如何从 ManyToMany 迁移到 ForeignKey?

django 模型:如何克服“通过”ManyToMany 选项限制