【发布时间】:2011-07-07 11:32:49
【问题描述】:
嗨 我有一个在 Django 应用程序中使用的域模型,我想在一个表单上呈现它。我已经使用自定义 ModelForms 创建了我的应用程序(没有太大变化,排除了一些字段等)。模型的依赖如下:
Complaint
\
.--- CarInfo
.--- Customer
我的视图函数如下所示:
def make(request):
if request.method == 'POST':
parameters = copy.copy(request.POST)
complaint = Complaint()
carInfo = CarInfo()
customer = Customer()
customer_form = CustomerForm(parameters, instance=customer)
carInfo_form = CarInfoForm(parameters, instance=carInfo)
parameters['complaint_date'] = get_current_date()
parameters['customer'] = 1 # dummy value to allow validation success
parameters['car_info'] = 1 # dummy value to allow validation success
form = ComplaintForm(parameters, instance=complaint)
if form.is_valid() and customer_form.is_valid() and carInfo_form.is_valid():
carInfo_form.save()
customer_form.save()
parameters['customer'] = customer.id
parameters['car_info'] = carInfo.id
form = ComplaintForm(parameters, instance=complaint)
form.save()
return index(request)
else:
form = ComplaintForm()
carInfo_form = CarInfoForm()
customer_form = CustomerForm()
return render_to_response('complaints/make_complaint.html', {'complaint_form' : form, 'customer_form' : customer_form, 'carInfo' : carInfo_form})
我不太喜欢这种方法,而且它并不适用于所有环境——我还没有找到它不起作用的原因。我一直在研究修复这段代码,发现类似 inline formset (http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets) .这个解决方案看起来不错,但由于我的表单是定制的,我可以使用它。
也许有人可以就如何正确解决这种情况给我一些建议。非常感谢更清洁的解决方案。
已编辑 对我来说有一个案例,这个解决方案不起作用。尽管在外键上设置了虚拟值,但当我调用 is_valid() 时,我得到 FALSE,错误消息指出这些字段未设置。我正在观察 django 1.2.5 的这个问题 - 它发生在我打算运行这个应用程序的服务器上,但是我的笔记本电脑(也是 django 1.2.5)没有这个问题。
【问题讨论】:
-
你能发布你的模型类和表单吗?
标签: django django-forms