以下查询集存在问题,我在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')
在管理员中,当我给他保存时,他告诉我:
不支持从方法到十进制的转换
感谢支持
答案 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')