我正在爲部件創建「訂單」表單。Django:從不同型號創建表格
我AddOrderForm
有Order
模型字段(如quantity
),但在同一時間從Part
模型的一些部分相關的信息(如name_in_english
)和PartNumber
型號(如number
)和其他一些領域......
首先我做獨立ModelForm
爲每一個和他們結合他們是這樣的:
forms.py
class PartNumberForAddOrderForm(forms.ModelForm):
class Meta:
model = PartNumber
fields = ('number',)
class PartForAddOrderForm(forms.ModelForm):
class Meta:
model = Part
fields = ('manufacturer','name_in_english')
class AddOrderForm(forms.ModelForm):
class Meta:
model = Order
fields = ('quantity',)
模板:
<form class="form-inline well" id="add_order">
<div class="row-fluid">
<div class="span12">
{% crispy form_part_number %}
{% crispy form_part %}
{% crispy form_order %}
<input type="submit" class="btn btn-primary pull-right" value="{% trans 'Add' %}"/>
</div>
</div>
</form>
有了這個觀點成爲: form_part_number.is_valid() and form_part.is_valid() and form_order.is_valid():
這一切看起來醜陋SUPER,只是錯誤的...
因此,我創建了另一種方式:
class PartForm(forms.ModelForm):
class Meta:
model = Part
fields = ('manufacturer','name_in_english')
class PartNumberForm(forms.ModelForm):
class Meta:
model = PartNumber
fields = ('number',)
class AddOrderForm(forms.ModelForm):
manufacturer = PartForm.base_fields['manufacturer']
name_in_english = PartForm.base_fields['name_in_english']
number = PartNumber.base_fields['number']
class Meta:
model = Order
fields = ('manufacturer','number','quantity','name_in_english')
問題:這是Form.base_fields['']
合法嗎?我認爲.save()
將無法正常工作,但.is_valid()
應該沒問題吧?有沒有更好的方法來做到這一點?
我可以罰款任何有用的地方,所以這是我想出了自己的東西。那讓我很擔心。
感謝
f.is_valid()! – danihp
@Alasdair,在我的實際案例中,我必須用一種形式使用5個「表格」 - 其中2個是由於我想要的字段的順序。但是讓我感到厭惡的是,我在一種實際的形式中使用了多種「形式」。我是Django的新手,並試圖弄清楚事情的真相。 –
我仍然堅持'base_fields' ...到目前爲止這麼好。謝謝你,阿拉斯代爾 –