【问题标题】:django shop app model definitiondjango shop 应用模型定义
【发布时间】:2016-10-21 01:46:49
【问题描述】:

我正在尝试制作商店应用。 我有以下型号

class Item(models.Model):
    name = models.CharField(max_length=200)

class Order(models.Model):
    item = models.ManyToManyField(Item)

所以我想要实现的是在一个订单中添加许多项目,但我也想指定订单中每个项目的数量,但我想不出一个好的方法来做到这一点。我想在创建订单后覆盖save(),并创建一个自定义表单,请求添加的每个项目的数量。但也许有更好/更简单的方法来实现这一点?

【问题讨论】:

    标签: django django-models model many-to-many


    【解决方案1】:

    Extra fields on many-to-many relationships

    当您只处理简单的多对多关系时,例如 作为混合和匹配比萨饼和浇头,标准的 ManyToManyField 是你所需要的全部。但是,有时您可能需要关联数据 两个模型之间的关系。

    对于这些情况,Django 允许你指定模型 用于管理多对多关系。然后你可以把 中间模型上的额外字段。中间模型是 使用 through 参数与 ManyToManyField 关联 指向将充当中介的模型。对于我们的音乐家 例如,代码如下所示:

    所以我们需要另一个模型。我们可以叫它OrderItem吗?

    class OrderItem(models.Model):
        order = models.ForeignKey(Order)
        item = models.ForeignKey(Item)
        quantity = models.IntegerField()
    

    只需将您的多对多字段更改为

    item = models.ManyToManyField(Item,through='OrderItem')
    

    【讨论】:

    • 谢谢!它看起来正是我想要的。我会试试的,让你知道!
    • 工作就像一个魅力!谢谢!当我创建订单时,我将 OrderItemInline 添加为内联,而我正是我想要的。我现在唯一的问题是是否可以使“项目”字段可搜索而不仅仅是 dropdpwn 列表?
    • 为了添加搜索功能,我终于制作了一个表单并将其添加到 OrderItemInline
    • 抱歉没能及时回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2013-02-24
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多