Django:根据条件进行更新

时间:2019-03-20 13:31:17

标签: python django

我想通过Django中的表单更新对象,但在视图中执行form.save()之前,我想对数据做一些条件。

例如:

ire = get_object_or_404(Ire, id_IRE=pk)
if request.method == 'POST':
    form = IreForm(request.POST or None, instance=ire)
    if form.is_valid():
        if ire.get_att1()==form.cleaned_data.get('att1') and ire.get_att2()==form.cleaned_data.get('att2'):
           form.save(update_fields=['type']) #just update the field type
        else:
           form.save() #create a new object

在我看来,只有第一个条件有效,但是当我以表格的形式更改att1或att2时,则不会做任何更改。

在保存之前,请帮助我如何做条件!

1 个答案:

答案 0 :(得分:0)

谢谢您,我找到了一种解决方案,该解决方案存储了要执行更新操作之前要更新的对象的值:

ire = get_object_or_404(Ire, id_IRE=pk)
**ire_att1=ire.get_att1()**
**ire_att2=ire.get_att2()**
**ire_type=ire.get_type()**

if request.method == 'POST':
  form = IreForm(request.POST or None, instance=ire)
  if form.is_valid():
    if **ire_att1**==form.cleaned_data.get('att1') and **ire_att2**==form.cleaned_data.get('att2'):
          Ire.objects.filter(id_IRE=pk).update(type=form.cleaned_data.get('type'))
    else:
          form.save()

这是我解决问题的方法,因为我发现在调用表单模型之后,对象的值与输入的内容同时改变,甚至在调用form.save之前也是如此