在django中修改.py文件中的db对象字段

时间:2015-06-07 17:11:32

标签: python django django-models

我有一个与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"字段未使用新值更新。

任何想法都会非常有用。

2 个答案:

答案 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)