Django 如何获取/过滤字段的最新值?

Django 如何获取/过滤字段的最新值?,django,python-3.x,max,django-queryset,getlatest,Django,Python 3.x,Max,Django Queryset,Getlatest,我有以下型号: class ProjectRecord(models.Model): user = models.ForeignKey(User,on_delete=models.CASCADE, null=True, blank=True,related_name='user_projects') project = models.ForeignKey(Project,on_delete=models.CASCADE, null=True, blank=True, relate

我有以下型号:

class ProjectRecord(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE, null=True, blank=True,related_name='user_projects')
    project = models.ForeignKey(Project,on_delete=models.CASCADE, null=True, blank=True, related_name='user_projects')
    project_type = models.CharField(max_length=30, choices=(("project_a","A"),("project_b","B")),null=True)
    version = models.FloatField(null=True, blank=True)
id project_id version project_type
1   5          1.0      project_a
2   5          1.0      project_b
3   4          1.0      project_a
4   4          1.0      project_b
5   5          2.0      project_a          
6   5          2.0      project_b
7   5          3.0      project_a
8   5          3.0      project_b
我想用以下内容筛选版本的最新值:

project = list(ProjectRecord.objects.filter(
    user=self.request.user, project_type='project_a'
))
但我不知道如何实现,数据库中的数据如下:

class ProjectRecord(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE, null=True, blank=True,related_name='user_projects')
    project = models.ForeignKey(Project,on_delete=models.CASCADE, null=True, blank=True, related_name='user_projects')
    project_type = models.CharField(max_length=30, choices=(("project_a","A"),("project_b","B")),null=True)
    version = models.FloatField(null=True, blank=True)
id project_id version project_type
1   5          1.0      project_a
2   5          1.0      project_b
3   4          1.0      project_a
4   4          1.0      project_b
5   5          2.0      project_a          
6   5          2.0      project_b
7   5          3.0      project_a
8   5          3.0      project_b
例如,我想获得
project\u id=5的最新值,以便与其他数据精确匹配,并且不删除其他
project\u id
的值。如果未更新其版本,则应显示
queryset
,如下所示

id project_id version project_type
1   4          1.0      project_a
2   4          1.0      project_b
3   5          3.0      project_a
4   5          3.0      project_b

尝试将注释与
Max
一起使用:

from django.db.models import Max

ProjectRecord.objects.filter(
    user=self.request.user,
    project_type='project_a'
).values(
    'project_id', 'project_type'
).annotate(
    max_version=Max('version')
)

因此,对于每个
项目类型
项目id
,您都想要最高版本吗?请不要使用
###文本
,这是为了让负责人(如
..
)编写字幕。我现在明白了,谢谢Willehi,谢谢您的快速回答,这看起来很有效,但在前端,我无法通过userproject.project.name和userproject.project.name或任何其他更改获取项目的名称和日期时间,它以前一直正常显示。@Begin2Pip不幸的是
值('project\u id','project\u type')
将限制您访问
'project\u id','project\u type'的字段。所以,如果您需要项目详细信息,您需要进行额外的查询。或者,您可以尝试直接添加必填字段作为值参数:
值('project\u id','project\u name','project\u datetime','project\u type')
。非常感谢,我也想显示project.version,仅显示projectrecord.version,而不是projectrecord.project.version,我发现这个字段也限制了版本, right@Begin2Pip不客气。我不太明白你的意思。但是您可以访问
max\u version
字段,而不是
version
字段,该字段被注释到queryset中。Never是的,是的,max\u version是正确的,非常感谢,