Django查询与同一个表

时间:2017-11-07 13:25:33

标签: mysql django join

我有一个这样的模型:

class mymodel(models.Model):
    user1 = models.CharField(max_length=255, null=True, blank=True)
    user2 = models.CharField(max_length=255, null=True, blank=True)
    paid = models.FloatField(default=0)
    reason = models.CharField(max_length=150, choices=REASON_NAMES, null=True, blank=True)

我有两个这样的问题:

users_trx1 = mymodel.objects.values('user1').annotate(r1_c=Count(
            Case(
                When(reason='REASON1', then=1),
                output_field=IntegerField()
            )
        )).annotate(r2_c=Count(
            Case(
                When(reason='REASON2', then=1),
                output_field=IntegerField()
            )
        )).order_by('user1')

第二个查询获取支付给user2的金额:

users_trx2 = mymodel.objects.values('user2').annotate(r1_s=Sum(
            Case(
                When(reason='REASON1', then='paid'),
                default=0.0,
                output_field=FloatField()
            )
        )).annotate(r2_s=Sum(
            Case(
                When(reason='REASON2', then='paid'),
                default=0.0,
                output_field=FloatField()
            )
        )).order_by('user2')

现在我需要一种方法来加入两个查询。意思是,我需要一个新的查询来获取每一行:(user1,r1_c,r1_s,r2_c,r2_s)。
我需要联接才能从user2查询中获取与users_trx2匹配的user1 users_trx1User Profile Manager值。

我正在使用带有mysql后端的Django 1.11

1 个答案:

答案 0 :(得分:0)

经过大量搜索后,我认为Django ORM不支持这种复杂的查询,所以我最后使用原始SQL来获取结果。