情况WHEN在数据不为零时从不同模型获取数据

时间:2017-09-13 11:43:47

标签: django

我有一个这样的简单模型:

     class Payments(models.Model):
       dt=models.DateField()
       payer=models.IntegerField(default=0)

如果会员自己支付,付款人= 0。但有时他的支持小组(有很多小组)可以为他/她付费,当发生这种情况时,付款人会持有支持小组的ID。我不想在这里实施关系。

现在我想列出付款但付款人> 0时,要获取实际为该会员付款的子组的名称。

            data=Payments.objects.filter(**build_filters['filters']).annotate(support_group_name=Case(When(payer__gt=0, then=Value('support group name goes here'), default=Value(''), output_field=CharField())).values('support_group_name','id','dt')

我已经有一个从各个位置使用的函数,它返回带有id的支持组的名称。我试过了:

   data=Payments.objects.filter(**build_filters['filters']).annotate(support_group_name=Case(When(payer__gt=0, then=Value(support_name(payer)), default=Value(''), output_field=CharField())).values('support_group_name','id','dt')

但我得到的付款人未定义。知道我能做些什么吗?

1 个答案:

答案 0 :(得分:0)

Django支持generic relations,允许你拥有" ForeignKey"喜欢可以对项目中的任何模型进行的界面

class Payment(models.Model):
    dt = models.DateField()
    payer_content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    payer_object_id = models.PositiveIntegerField()
    payer = GenericForeignKey('payer_content_type', 'payer_object_id')

此通用关系可以限于某组模型 - see this question

Payments.objects.filter(payer=user)
Payments.objects.filter(payer=support_group)