简体   繁体   English

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

[英]How to get/filter the latest value of a field?

I have models as below: 我有以下模型:

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)

I want to filter the latest value of version with this: 我想用这个过滤版本的最新值:

project = list(ProjectRecord.objects.filter(
    user=self.request.user, project_type='project_a'
))

But I don't know how to achieve it.the data in database is similar as below: 但是我不知道如何实现。数据库中的数据如下所示:

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

For example, I want to get the latest value of project_id=5 to exact match other data and do not delete other project_id 's value if their versions are not updated, the queryset should be display as below 例如,我想获取project_id=5的最新值以与其他数据完全匹配,并且如果不更新其他project_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

Try to use annotation with Max : 尝试对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')
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM