2个值之间的queryset过滤器,前面有键吗?

时间:2019-05-28 04:26:31

标签: django-queryset

以下查询集存在问题,我在django shell中对其进行了探测,并返回了一个空列表。

这种情况是,我正在使用一个学习密钥​​,我对模型“ Tarifa_Sem”进行了相同的练习,并且没有任何问题地返回了值,只需将F('')替换为变量x = 1000

情况是“ Tarifa_Sem”模型的表仅供参考。

我要在“ Calculadora_isr”模型中管理和保存查询集的响应

模型1

class Tarifa_Sem(models.Model):
limite_inferior_isr = models.DecimalField(max_digits=10, decimal_places=2)
limite_inferior_subsidio = models.DecimalField(max_digits=10, decimal_places=2)
limite_superior = models.DecimalField(max_digits=10, decimal_places=2)

模型2

class Calculadora_isr(models.Model):
tarifa = models.ForeignKey(Tarifa_Sem, on_delete=models.CASCADE, blank=True)
base_gravada = models.DecimalField(max_digits=10, decimal_places=2, blank=True)
limite_inf_calculo = models.DecimalField(max_digits=10, decimal_places=2, blank=True)

Queryset and save()

def limite_inferior(self):
    queryset = Calculadora_isr.objects.filter(tarifa__limite_superior__gte=F('base_gravada'),tarifa__limite_inferior_isr__lte=F('base_gravada')).distinct().values('tarifa__limite_inferior_isr')
    return queryset

def save(self):
    self.limite_inf_calculo = self.limite_inferior
    super (Calculadora_isr, self).save()

在django的外壳中,列表显示为空。

>>> queryset = Calculadora_isr.objects.filter(tarifa__limite_superior__gte=F('base_gravada'),tarifa__limite_inferior_isr__lte=F('base_gravada')).distinct().values('tarifa__limite_inferior_isr')

在管理员中,当我给他保存时,他告诉我:

不支持从方法到十进制的转换

感谢支持

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方法。

要解决传递“ base_gravada”字段的问题,请使用另一个返回“ base_gravada”所有值的变量

qs1 = Calculadora_isr.objects.values_list('base_gravada')

在第二个查询中,使用变量qs1:

qs2 = Tarifa_Sem.objects.filter(limite_superior__gte=qs1,limite_inferior_isr__lte=qs1).distinct().values('limite_inferior_isr')