在inlineform_set中使用具有外键关系的多个对象

时间:2010-12-08 15:53:57

标签: python django

我有以下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一起保存。

任何见解都将受到赞赏。

...谢谢

1 个答案:

答案 0 :(得分:0)

您不能拥有多个嵌套的formsets。但你在这里不需要它们。你真正想要的只是orderitem表单有一个product字段,它是所有可用产品及其代码的选择框。只要您定义Product模型的__unicode__方法以返回产品代码,然后在模板中使用form.product,就可以自动获得。