将依赖模型中的特定对象与Django中另一个模型的每一行相关联

时间:2018-09-17 19:35:32

标签: django

我有以下模型:

class Project(models.Model):
    name = models.CharField(max_length=100)

class Milestone(models.Model):
    project = models.ForeignKey(Project, related_name='milestones', on_delete=models.CASCADE)
    description = models.CharField(max_length=100)
    completed = models.BooleanField(default=False)

...以及示例数据:

{name: 'SpaceY', milestones: 
    [{id:1, project: 1, description: '1st milestone description',completed: False}, 
     {id: 2, project: 1, description: '2nd description',completed: False}]}, 

{name: 'ProjectX', milestones: 
    [{id:3, project: 2, description: 'ProjectX 1st Desc',completed: True}, 
     {id: 4, project: 2, description: 'one more description',completed: False}]}

...,我需要这样的输出:

{name: 'SpaceY', milestone: 
    {id:1, project: 1, description: '1st milestone description', completed: False}}, 

{name: 'ProjectX', milestone: 
     {id: 4, project: 2, description: 'one more description', completed: False}}

即我只希望每个项目的ID最小的未完成里程碑。如果所有的里程碑都完成了,那就没有项目了。

我尝试使用prefetch_related和其他东西,但是我得到的最好的结果是许多重复的项目。

可以使用Django ORM解决该问题,还是需要深入研究原始SQL?

1 个答案:

答案 0 :(得分:0)

似乎以下查询对我有用

queryset = Milestone.objects.filter(completed=False).order_by('project_id','id').distinct('project_id')