1

Django プロジェクトでは、2 つのパーツ リストを 1 つに結合する必要があります。

models.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
    )

views.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'))

基本的にここでは、同じ部品をすべてグループ化し、それらの数量を合計したいと考えています。上記のように動作しますが、pkまたはproject__pk引数のコメントを外すと、パーツはグループ化されなくなります (パーツが同じであっても可変であるためだと思います)。

pkグループ化を維持しながら、およびproject__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 に答える