python - 迭代我的值的 2 个模型之间的 Django Queryset 过滤器对象?
问题描述
我正在做一个税收计算器,我必须查询一个模型并在另一个模型中评估它们。
我解释我想做什么。
我有以下型号:
class Tarifa_Sem(models.Model):
limite_inferior_isr = models.DecimalField(max_digits=10, decimal_places=2)
limite_superior = models.DecimalField(max_digits=10, decimal_places=2)
class Calculadora_isr(models.Model):
tarifa = models.ForeignKey(Tarifa_Sem, on_delete=models.CASCADE, null=True, blank=True, related_name='calculators')
base_gravada = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
limite_inf_calculo = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
现在有问题的问题是我需要执行以下操作。
我的模型 Tarifa_Sem 有以下数据:
+--------------------------------------+
| Model Tarifa_Sem |
+--------------------------------------+
|id |limite_inf | limite_superior |
+---+-----------+----------------------+
| 1 | 0.01 | 133.21 |
+---+-----------+----------------------+
| 2 | 133.22 | 407.33 |
+---+-----------+----------------------+
| 3 | 133.22 | 610.96 |
+---+-----------+----------------------+
| 4 | 133.22 | 799.68 |
+---+-----------+----------------------+
| 5 | 133.22 | 814.66 |
+---+-----------+----------------------+
| 6 | 133.22 | 1023.75 |
+---+-----------+----------------------+
| 7 | 133.22 | 1086.19 |
+---+-----------+----------------------+
| 8 | 133.22 | 1130.64 |
+---+-----------+----------------------+
| 9 | 1130.65 | 1228.57 |
+---+-----------+----------------------+
| 10| 1130.65 | 1433.32 |
+---+-----------+----------------------+
| 11| 1130.65 | 1638.07 |
+---+-----------+----------------------+
| 12| 1130.65 | 1699.88 |
+---+-----------+----------------------+
在我的计算器模型中,我在 base_gravda 中有以下数据:
+--------------------------------------+
| Model Calculadora_isr |
+--------------------------------------+
|id |base_gravada| limite_inf_calculo |
+---+------------+---------------------+
|1 | 1000.00 | |
+---+------------+---------------------+
|2 | 1200.00 | |
+---+------------+---------------------+
|3 | 500.00 | |
+---+------------+---------------------+
|4 | 1600.00 | |
+---+------------+---------------------+
我想评估我的模型 Tarifa_Sem, 上限中的每个 base_gravada 量,并且我通过执行以下评估返回我带来的第一个值 base_gravada > = limite_superior 并且我创建了第一个 () 以便我可以返回第一个值这比我的 base_gravada 更大,一旦我有了这个值,我告诉他给我带来 limite_inferior,这是我应该保留在模型中的,结果表应该如下所示:
+--------------------------------------+
| Model Calculadora_isr |
+--------------------------------------+
|id | Base | limite_inf_calculo |
+---+-----------+----------------------+
|1 | 1000.00 | 133.22 |
+---+-----------+----------------------+
|2 | 1200.00 | 1130.65 |
+---+-----------+----------------------+
|3 | 500.00 | 133.22 |
+---+-----------+----------------------+
|4 | 1600.00 | 1130.65 |
+---+-----------+----------------------+
也就是说,base_gravada 的第一个值 1000.00 将其置于 Tarifa_Sem 的范围 ID 6 中,并为每个值带来 limite_inferior_isr 等。
现在,如果有人能告诉我缺少什么,这是我最接近解决问题的方法。
for base in Calculadora_isr.objects.all():
Tarifa_Sem.objects.filter(Q(limite_superior__gte=base.base_gravada)).values_list('limite_inferior_isr', flat=True).first()
此查询在 Django shell 中执行,它返回以下值:
Decimal('133.22')
Decimal('1130.65')
Decimal('133.22')
Decimal('1130.65')
这些值是正确的,问题是当我尝试将结果传递给查询集时,只返回最后一个值:
for base in Calculadora_isr.objects.all():
queryset = Tarifa_Sem.objects.filter(Q(limite_superior__gte=base.base_gravada)).values_list('limite_inferior_isr', flat=True).first()
Decimal('1130.65')
有人知道缺少什么或如何解决这个问题。
谢谢
解决方案
尝试这个:
results = [
Tarifa_Sem.objects.filter(
limite_superior__gte=obj.base_gravada
).values_list('limite_inferior_isr', flat=True).first()
for obj in Calculadora_isr.objects.all()
]
更新:
for obj in Calculadora_isr.objects.all():
obj.limite_inf_calculo = Tarifa_Sem.objects.filter(
limite_superior__gte=obj.base_gravada
).values_list('limite_inferior_isr', flat=True).first()
obj.save()
推荐阅读
- grid - 容器的缩放比例不小于 576px
- python-3.x - 有什么方法可以在 Python 中以字节为单位将图像添加到 pdf 中?
- elixir - 具有动态构建条件的 Ecto 连接
- r - 如何按每日最小值聚合数据框
- cqrs - 拉戈姆 | 读取端处理器的返回值
- amazon-web-services - 如何将步骤中的输入插入到 json 结构并传递到步骤函数中的下一步?
- javascript - 向后打印特定索引的值
- android - SwipeRefreshLayout 和处理 webview 中的外部链接(手动类)在 android webview 中不能一起工作
- c - strcpy 将结构名称复制到字符数组?
- c# - Why would a non-UI thread block the UI?