1

对于 Django 项目,我需要将两个部件列表合二为一。

模型.py

class UserBuild(models.Model):
    project = models.ForeignKey(Project)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    part = models.ForeignKey(Parts)
    part_quantity = models.IntegerField(max_length=5, null=True, blank=True)
    suggested_quantity = models.IntegerField(
        max_length=5, null=True, blank=True
    )

视图.py

def CombineProjects(request, template_name='combined_projects.html'):
    ...
    build_set = UserBuild.objects.values(
        #'pk',
        #'project__pk',
        'part__number',
        'part__part_type__name',
        'part__price',
        'part__description',
        'part__category__name'
    ).filter(
        project__in=projects
    ).order_by('part__category', 'part__part_type').annotate(total=Sum('part_quantity'))

基本上在这里我想对所有相同的部分进行分组并总结它们的数量。如上所述,但如果我取消注释pkorproject__pk参数,则不再对这些部分进行分组(我假设因为即使部分相同,它们也是可变的)。

有什么方法可以保持分组但也包括pkproject__pk值?

4

1 回答 1

0

问题是您的值列表是您分组和汇总的内容;所以你真的只想按项目和零件号分组。

我会尝试:

build_set = UserBuild.objects.values(
    'project__pk',
    'part__number',
).filter(
    project__in=projects
).order_by('part__category', 'part__part_type').annotate(total=Sum('part_quantity'))

然后稍后将其他属性合并到此列表中。但是,我不确定这是否可行。您可能需要这样做:

build_set = UserBuild.objects.values(
    'project_id',
    'part_id',
).filter(
    project__in=projects
).order_by('part__category', 'part__part_type').annotate(total=Sum('part_quantity'))

之后手工做更多的工作。

于 2013-03-12T20:48:02.063 回答