在Django中清除时如何更改另一个字段值?

时间:2020-09-18 14:35:19

标签: python django django-models django-forms django-templates

我正在使用Django表单更新,但面临一个小问题,我在表单更新中有3个字段,nameimagestatus,现在,如果用户上传形式的图像,则status会在数据库中自动更改为1

但是现在,如果我使用图像的checkbox清除表单,则应在数据库中status更新此0

这是我的forms.py文件...

class UpdateForm(forms.ModelForm):
...
def save(self, commit=True):
    instance = super(UpdateForm, self).save(commit=False)

    # Set status if saving picture
    if instance.image:
        instance.status = 1

    if commit:
        instance.save()

这是我的views.py文件...

def myview(request, id):
    datas=Product.objects..get(pk=id)
    form = UpdateForm(instance=datas)
    if request.method === 'POST'
       form = UpdateForm(request.POST or None, request.FILES or None, instance=datas)
       if form.is_valid():
         edit = form.save(commit=False)
         edit.save()
         return HttpResponse('Success')
    else:
      return HttpResponse('Fail')
    template_name='test.html'
    context={'datas':datas}
    return render(request, template_name, context)

这是我的site.html文件...

<form method="POST" action="" enctype="multipart/form-data">
  {% csrf_token %}
<a href="/media/{{datas.image}}"/>{{datas.image}}</a>
<input type="checkbox" name="image-clear" id="image-clear_id"/> Clear
<input type="submit" value="submit">

当我更新此表单时,它将在状态字段中更新1,但是如果我从form中清除,则status应该是我数据库中的0

1 个答案:

答案 0 :(得分:0)

当您通过取消选中复选框来运行代码时,将跳过以下行:

if instance.image:
    instance.status = 1  # This will be skipped since instance.image is now False

尝试为instance.image的条件为false时添加操作。

if instance.image:
    instance.status = 1
else:
    instance.status = 0

您当然可以对其进行重构,以使其更加优美,但是清楚地表明了逻辑。