Python 如何在Django模型中找到所有名称的最新匹配项?
我有一个django模型,看起来像这样:Python 如何在Django模型中找到所有名称的最新匹配项?,python,django,orm,django-models,django-queryset,Python,Django,Orm,Django Models,Django Queryset,我有一个django模型,看起来像这样: class MyModel(Model): name = CharField(...) version = IntegerField(...) other_stuff = ... unique_together = ('name', 'version') class MyModel(Model): name = CharField(...) some_stuff = ... class Version
class MyModel(Model):
name = CharField(...)
version = IntegerField(...)
other_stuff = ...
unique_together = ('name', 'version')
class MyModel(Model):
name = CharField(...)
some_stuff = ...
class Version(Model):
number = IntegerField(...)
my_model = ForeignKey(MyModel, ...)
other_stuff = ...
我希望能够查询每个名称的所有最新版本,但忽略任何给定名称的所有旧版本
对于Django型号,这可能吗?如果是这样,那会是什么样子?我认为您需要按名称分组,然后在每个组上选择。我自己从未使用过这个,但可能会提供一些关于如何使用它的见解 更新:似乎我的代码是对的,但虽然它应该适用于您的具体情况,但我还不知道如何在同一查询中获取其他字段(假设您不仅需要版本号,还需要其他内容-此解决方案不起作用): 如果您使用的是Django 1.4和PostgreSQL,则可以使用以下方法:
我不确定仅仅使用Django ORM的聚合特性就可以立即做到这一点。不管怎样,我认为这种结构是一种像这样的模型:
class MyModel(Model):
name = CharField(...)
version = IntegerField(...)
other_stuff = ...
unique_together = ('name', 'version')
class MyModel(Model):
name = CharField(...)
some_stuff = ...
class Version(Model):
number = IntegerField(...)
my_model = ForeignKey(MyModel, ...)
other_stuff = ...
因此,您可以这样做以获得每个MyModel
的最新版本:
>>> from django.db.models import Max
>>> MyModel.objects.annotate(highest_version = Max('version__number'))
我的用例会是什么样子?你能告诉我如何A)列出所有最新版本的模型,B)获得任何版本的特定模型,以及C)在哪里进行“注释”操作?