Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django模型中找到所有名称的最新匹配项?_Python_Django_Orm_Django Models_Django Queryset - Fatal编程技术网

Python 如何在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

我有一个django模型,看起来像这样:

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)在哪里进行“注释”操作?