Djangular Demos的 Python 源代码提供了如何处理来自创建 Django 对象实例的表单的发布请求的示例。但他们没有展示如何处理来自更新现有对象实例的表单的发布请求。
更新对象的代码似乎相当复杂:我的代码缺少一些重要的东西。使用我的代码,我总是收到表单验证错误:Object with this Name already exists.
我正在使用 Django 通用 UpdateView 类,并且我的模型有一个名为name的唯一字段。
我的代码:
from django.views.generic.edit import UpdateView
class MyForm(NgModelFormMixin, Bootstrap3FormMixin, NgModelForm):
scope_prefix='form_data'
form_name = 'my_form'
class Meta:
model = models.MyModel
fields = ['name','person']
class MyModelUpdate(UpdateView):
model = models.MyModel
form_class = MyForm
def post(self, request, **kwargs):
if request.is_ajax():
return self.ajax(request, **kwargs)
return super(MyModelUpdate, self).post(request, **kwargs)
# from the djangular combined_validation example
def ajax(self, request, **kwargs):
# tbd: need update-specific logic here: pass in instance
# parameter (object) or set it from pk. Base class post
# methods use self.get_object()
form = self.form_class(data=json.loads(request.body))
return JsonResponse({'errors': form.errors,
'success_url': force_text(self.success_url)})
我需要什么代码让 Django 加载由pk参数标识的实例并将其附加到表单。当请求数据来自 POST 而不是 ajax 时,这将是默认行为吗?