我有一个与MODEL.py中可用的模型A相对应的表单,其中包含"金额"领域。 我还有一个模型B,它还有一个" total_amount"领域。 当通过它的相应形式创建新的模型A时,在表单子模型之后我想保存模型A并修改模型B的total_amount字段,因此它是:ModelB.total_amount + = ModelA.amount。 我通过这行代码表示了这个逻辑:
def form_valid(self, form):
self.object = form.save(commit=False)
amount_to_add = form.cleaned_data['amount']
model_b = utils.get_model_b_by_currency(form.cleaned_data['currency'])
model_b[0].total_amount = model_b[0].total_amount + amount_to_add
model_b[0].save()
self.object.save()
return super(ModelFormMixin, self).form_valid(form)
代码正确执行,模型A已创建,但模型B" total_amount"字段未使用新值更新。
任何想法都会非常有用。
答案 0 :(得分:2)
您的get_model_b_by_currency
正在返回查询集而不是单个实例。每次切片查询集时,都会获得一个新实例。相反,要么从get_model_b_by_currency
返回实例 - 例如使用get()
而不是filter()
- 或者将其切片一次,将其分配给变量,然后修改并保存该变量。
答案 1 :(得分:-1)
在'modelA'类中创建以下函数:
def save(self, *args, **kwargs):
amount_to_add = self.amount # The amount field in model A class
model_b = utils.get_model_b_by_currency(self.amount)
model_b[0].total_amount = model_b[0].total_amount + amount_to_add
model_b[0].save()
return super(ModelA, self).save(*args, **kwargs)