【发布时间】:2011-04-08 22:25:06
【问题描述】:
我有一个复杂的 django 对象,它具有其他类类型的属性。变成这样:
class Order:
contractor - type Person
some other fields....
在我的表单中,我希望能够从下拉列表中选择现有的 Person 对象,或者使用表单添加一个新对象。我已经设法创建表单和适当的工作流程,但问题在于保存订单本身,我根本无法获取已保存的 Person 实例的 id。我正在这样做:
def make_order(request):
if request.method == 'POST':
parameters = copy.copy(request.POST)
contractor_form = ContractorForm(parameters)
if contractor_form.is_valid():
contractor_form.save()
parameters['contractor'] = ???
form = OrderForm(parameters)
if form.is_valid():
form.save()
return HttpResponseRedirect('/orders/')
else:
form = OrderForm()
contractor_form = ContractorForm()
return render_to_response('orders/make_order.html', {'order_form' : form, 'contractor_form' : contractor_form})
因此,如果 POST 请求到达此方法,我首先检查是否已填写 ContractorForm - 我假设如果表单有效,则它应该被使用。如果是,那么我保存它并希望将保存的对象的数据库 ID 分配给适当的字段,以便 OrderForm 找到它。
我所有的表单都是 ModelForms。
问题是:
- 有没有更好的方法来做到这一点? (从下拉列表中选择或添加到位)- 更好或更 Pythonic ;-)
- 使用 ModelForms 时如何获取保存的对象 ID?
已编辑
我的 ContractorForm 是:
class ContractorForm(ModelForm):
class Meta:
model = Contractor
没什么特别的。
【问题讨论】:
-
附带说明,使用反向 (docs.djangoproject.com/en/dev/topics/http/urls/#reverse) 而不是直接在
HttpResponseRedirect中引用 '/orders/' 网址...这将为您省去很多麻烦,相信我:) -
哈!你说得对,我早该这么做的。
标签: django django-models django-forms