我有以下Django模型:
class Order:
order_id
order_date
class OrderItem
models.ForeignKey(Order)
models.ForeignKey(Product)
quantity
unit_price
要说明,订单可以包含多个订单商品。
现在,我想创建一个允许创建订单的模板。所以在我的视图函数中,我有以下内容:
def new_order:
order = Order()
OrderItemFormSet = inlineformset_factory(Order, OrderItem, extra=2)
formset = OrderItemFormSet()
cntx = {'formset': formset, 'order':order}
return render_to_response('some_page.html', cntx)
在模板本身中,我遍历formset中的表单,并且所有表单似乎都有效,这意味着我可以创建包含多个订单商品的订单。
现在,我创建了一个名为Product的新模型。新的Product模型将成为OrderItem模型的一部分。因此,我们订购商品包含产品以及数量,单价等其他指标。
class Product:
product_code
product_name
接下来,我使用以下行更新了OrderItem模型:
product = models.ForeignKey(Product)
我面临的问题是如何在模板中处理上述场景。在添加Product模型之前,遍历formset的for循环如下所示:
{% for form in formset %}
<td> {{form.quantity}} </td>
....
{%endfor%}
现在,理想情况下,我认为我可以这样做:
{% for form in formset %}
<td> {{form.quantity}} </td>
<td> {{form.product.code}} </td>
....
但上述方法无效。基本上,我想要实现的是能够在创建订单的订单商品时添加产品代码。保存后,订单商品应与用户输入的产品代码的相应产品ID一起保存。
任何见解都将受到赞赏。
...谢谢
答案 0 :(得分:0)
您不能拥有多个嵌套的formsets。但你在这里不需要它们。你真正想要的只是orderitem表单有一个product
字段,它是所有可用产品及其代码的选择框。只要您定义Product模型的__unicode__
方法以返回产品代码,然后在模板中使用form.product
,就可以自动获得。