我想使用Django表单在Django 1.9中编辑一行:
所以我所做的是
对于get请求,我初始化了表单实例(views.py)
def get(self, request):
myModel = model.myModel.objects.get(user=request.user)
form_instance = MyForm(initial=myModel.__dict__)
return render(request, 'mytemplate.html', {'form': form_instance} )
def post(self, request):
form_instance = MyForm(request.POST)
if form_instance.is_valid():
form_instance.save()
return redirect('..')
return render(request, 'mytemplate.html', {'form': form_instance} )
这是我的模型
class MyModel(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
Booth = models.OneToOneField(BoothLocation)
class BoothLocation(models.Model):
LocationID = models.CharField(max_length = 25)
我有一个forms.py
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('Booth')
labels = {'Booth':_('Booth Chosen')}
我的问题是我的模型有一对一的字段,因此无论何时执行
form_instance = MyForm(request.POST)
它将返回一个错误,指出onetoonefield必须是唯一的,但我只是在更新它。有没有方法可以覆盖此验证?
顺便说一句,该领域确实需要一对一。
做错了
form_instance = MyForm(initial=myModel.__dict__)
它应该是
form_instance = MyForm(instance=myModel)
糟糕,忘记添加,为了处理表单验证失败的情况,您的后开会者可能需要这样的东西:
form_instance = MyForm(request.POST, instance=myModel)
您将需要再次获取该实例。附带一提,可以通过将两个函数合并为一个函数并在其中添加其他代码来极大地简化代码
if request.method == 'POST':
else:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句