django - 如何从 Django 中的编辑表单更新对象?

标签 django django-forms

可能是新手问题,请耐心等待。

我有一个 Django 表单,用于编辑模型的某个实例。为了知道正在编辑哪个对象,我有一个包含对象 ID 的隐藏字段,以及包含该 ID 的 URL。

第一个问题:将对象的 ID 放在隐藏字段中是正确的做法吗?

我(可能没有根据)担心将它仅作为 url 的一部分,因为有人可以打开一个对象 ID 的页面,将表单提交给另一个对象,然后该对象将被覆盖。这就是我尝试使用隐藏字段的原因。

将 id 存储在隐藏字段中的问题在于,在验证表单时,Django 提示该对象没有唯一的 id(很明显)。

第二个问题:如果唯一字段是表单的一部分,如何告诉 Django 忽略该键已经存在的事实,以便更新对象?

最佳答案

为什么不直接使用 ModelForm?

# forms.py
# ...
class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel

# views.py
# ...    
def my_view(request, id): 
    instance = get_object_or_404(MyModel, id=id)
    form = MyForm(request.POST or None, instance=instance)
    if form.is_valid():
        form.save()
        return redirect('next_view')
    return render(request, 'my_template.html', {'form': form}) 

参见 https://docs.djangoproject.com/en/3.0/topics/forms/modelforms/#the-save-method了解更多详情。

关于django - 如何从 Django 中的编辑表单更新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4673985/

相关文章:

python - 返回 csv 文件作为响应,其中仅包含标题

jquery - django:发送 POST 以从可能无限的表单中查看的正确方法

python - Django、防火墙、Selenium、[Errno 10061] 和implicitly_wait()

Django 说它必须是一个模型实例

python - Django Rest Framework 中的批量更新数据

python - Django - 如何删除文章?

Django : Add kwargs parameters from get_context_data() to ModelForm

python - 带有 HiddenInput 的 Django 的 ModelForm 返回无效

django - Django表单方法的副作用 `is_valid()` : intance updated?

python - Django Wizard,一步多表单