我有一個複雜的Django對象,它具有其他類類型的屬性。這得到這樣的:Django模型表單和對象數據庫ID
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
沒什麼特別的。
在一個側面說明,利用反向(http://docs.djangoproject.com/en/dev/topics/http/url /#reverse),而不是直接在你的'HttpResponseRedirect'中引用'/ orders /'url ...它會爲你節省大量的頭痛在未來,相信我:) – sdolan 2010-09-06 22:42:02
哈!你說得對,我應該早點完成。 – 2010-09-07 04:51:10