Как получить / отфильтровать последнее значение поля? - PullRequest
0 голосов
/ 09 июня 2018

У меня есть модели, как показано ниже:

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)

Я хочу отфильтровать последнее значение версии следующим образом:

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

Но я не знаю, как этого добиться.данные в базе данных аналогичны приведенным ниже:

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_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

1 Ответ

0 голосов
/ 09 июня 2018

Попробуйте использовать аннотацию с 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')
)
...