python - 如何正确保存或更新模型中列表的值?
问题描述
我有以下型号:
class Tarifa_Sem (models.Model):
limit_inferior_isr = models.DecimalField (max_digits = 10, decimal_places = 2)
limit_superior = models.DecimalField (max_digits = 10, decimal_places = 2)
cuota_fija_t = models.DecimalField (max_digits = 10, decimal_places = 2, blank = True)
percentage_over_excess = models.DecimalField (max_digits = 10, decimal_places = 2)
class Calculator_isr (models.Model):
rate = models.ForeignKey (Rate_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)
percentage_excent_li = models.DecimalField (max_digits = 10, decimal_places = 2, null = True, blank = True)
fixed_ quota = models.DecimalField (max_digits = 10, decimal_places = 2, null = True, blank = True)
我通过迭代 base_gravada 字段的值来进行查询。
results = [
Tarifa_Sem.objects.filter (limite_superior__gte = obj.base_gravada)
.values_list ('limite_inferior_isr', 'cuota_fija_t', 'percentage_over_excess')
. First ()
for obj in Calculadora_isr.objects.all ()
]
此查询返回此列表:
[(Decimal ('133.22'), Decimal ('2.59'), Decimal ('6.40')),
(Decimal ('8790.96'), Decimal ('1649.34'), Decimal ('30 .00 ')),
(Decimal ( '2765.43'), Decimal ('292.88'), Decimal ('21 .36 ')),
(Decimal (' 8790.96 '), Decimal (' 1649.34 '), Decimal ('30 .00'))]
要保存使用 create() 方法:
for t in results:
... Calculadora_isr.objects.create (limite_inf_calculo = t [0],
percentage_excent_li = t [2], fixed_ quota = t [1]). Save ()
在我指出要保留的列表的字段和索引的地方,问题是它不会将它们保存在具有 base_gravated 初始值的 ID 中,如果不是我创建新值:
+------------------------------------------------------------------------------------+
| Model Calculadora_isr |
+--------------------------------------+----------------------+----------------------+
|id |base_gravada| limite_inf_calculo | fixed_ quota | percentage_excent |
+---+------------+---------------------+ ---------------------+ ---------------------+
|1 | 1000.00 | | | |
+---+------------+---------------------+ ---------------------+ ---------------------+
|2 | 10000.00 | | | |
+---+------------+---------------------+----------------------+ ---------------------+
|3 | 5000.00 | | | |
+---+------------+---------------------+ ---------------------+ ---------------------+
|4 | 10000.00 | | | |
+---+------------+---------------------+ ---------------------+ ---------------------+
|5 | | 133.22 | 2.59 | 6.40 |
+---+------------+---------------------+ ---------------------+ ---------------------+
|6 | | 8790.96 | 1649.34 | 30.00 |
+---+------------+---------------------+----------------------+ ---------------------+
|7 | | 2765.43 | 292.88 | 21.36 |
+---+------------+---------------------+ ---------------------+ ---------------------+
|8 | | 8790.96 | 1649.34 | 30.00 |
+---+------------+---------------------+ ---------------------+ ---------------------+
我需要的是能够将值保存在我的 Calculadora_isr 模型中,如下所示:
+------------------------------------------------------------------------------------+
| Model Calculadora_isr |
+--------------------------------------+----------------------+----------------------+
|id |base_gravada| limite_inf_calculo | fixed_ quota | percentage_excent |
+---+------------+---------------------+ ---------------------+ ---------------------+
|1 | 1000.00 | 133.22 | 2.59 | 6.40 |
+---+------------+---------------------+ ---------------------+ ---------------------+
|2 | 10000.00 | 8790.96 | 1649.34 | 30.00 |
+---+------------+---------------------+----------------------+ ---------------------+
|3 | 5000.00 | 2765.43 | 292.88 | 21.36 |
+---+------------+---------------------+ ---------------------+ ---------------------+
|4 | 10000.00 | 8790.96 | 1649.34 | 30.00 |
+---+------------+---------------------+ ---------------------+ ---------------------+
我需要这方面的帮助谢谢
解决方案
在创建results
列表期间,还添加实例的 pk,然后使用它来更新实例。
results = [
[obj.id, Tarifa_Sem.objects.filter(limite_superior__gte = obj.base_gravada)
.values_list('limite_inferior_isr', 'cuota_fija_t', 'percentage_sobre_excedente')] for obj in Calculadora_isr.objects.all ()
]
for t in results:
instance = Calculadora_isr.objects.get(t[0])
instance.limite_inf_calculo = t[1][0][0]
instance.percentage_excendente_li = t[1][0][2]
instance.cuota_fija = t[1][0][1]
instance.save()
推荐阅读
- excel - VBA过滤超过2个标准
- ios - 在 IOS 上运行 react-native 应用程序的一些麻烦
- android - 高程产生的阴影以圆形可绘制为背景但不以矩形显示
- ruby-on-rails - Heroku 上的 Bundler 无法运行正确的版本
- java - 如何识别收到消息的 MQTT 主题?
- sh - 使 sh 脚本启动多个 Tmux 会话
- selenium-webdriver - 将鼠标悬停在页脚上时如何获得下划线和 facebook 图标颜色
- c# - 将容器注册类型与 Shell 窗口标题链接
- algorithm - 我可以计算距离严格小于 delta 的最近分割点对吗
- javascript - 如何使电子浏览器全屏尺寸?