【问题标题】:Working with Multiple objects with foreign key relationship in inlineform_set使用 inlineform_set 中具有外键关系的多个对象
【发布时间】:2010-12-08 15:53:57
【问题描述】:

我有以下 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)

在模板本身中,我遍历了表单集中的表单,一切似乎都可以正常工作,这意味着我能够创建一个包含多个订单项的订单。

现在,我创建了一个名为 Product 的新模型。新的 Product 模型将成为 OrderItem 模型的一部分。因此,我们订购的商品包含产品以及数量、单价等其他指标。

class Product:
    product_code
    product_name

接下来,我使用以下行更新了 OrderItem 模型:

product = models.ForeignKey(Product)

我面临的问题是如何在模板中处理上述场景。在添加 Product 模型之前,遍历表单集的 for 循环是这样的:

{% for form in formset %}
   <td> {{form.quantity}} </td>
   ....
{%endfor%}

现在,理想情况下,我认为我可以这样做:

{% for form in formset %}
  <td> {{form.quantity}} </td>
  <td> {{form.product.code}} </td>
  ....

但以上不起作用。基本上,我想要实现的是能够在为订单创建订单项目时添加产品代码。保存时,订单商品应与用户输入的产品代码对应的产品id一起保存。

我们将不胜感激。

谢谢...

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2016-12-30
      • 2020-06-07
      • 1970-01-01
      相关资源
      最近更新 更多