我正在为部件创建“订单”表单。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' ...到目前为止这么好。谢谢你,阿拉斯代尔 –