可能是一个新手问题,所以请耐心等待。
我有一个Django表单,可以编辑Model的某个实例。为了知道正在编辑哪个对象,我有一个包含对象id的隐藏字段,以及包含id的URL。
第一个问题:隐藏字段中的对象ID是否正确?
我(可能毫无根据)担心只将其作为网址的一部分,然后有人可以打开一个对象ID的页面,将表单提交给另一个,然后该对象将被覆盖。这就是我试图使用隐藏字段的原因。
将id存储在隐藏字段中的问题是,在验证表单时,Django抱怨该对象没有唯一的id(显然)。
第二个问题:如果一个唯一字段是表单的一部分,那么为了更新对象,如何告诉Django忽略该键已存在的事实?
答案 0 :(得分:88)
为什么不使用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})
答案 1 :(得分:11)
更新Django 1.6及更新版本
# forms.py
# ...
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
# views.py
def my_view(request, id):
instance = MyModel.objects.get(id=id)
form = MyForm(request.POST or None, instance=instance)
if form.is_valid():
form.save()
return redirect('next_view')
return direct_to_template(request, 'my_template.html', {'form': form})