【问题标题】:representing manytomanyfield with extra attributes in django在 django 中表示具有额外属性的 manytomanyfield
【发布时间】:2014-01-11 11:07:24
【问题描述】:

我有一种情况,我需要在这些产品上存储一个“产品”表和一个“订单”表

一个订单由许多 ("Product", "Quantity") 元组组成,其中数量是以吨表示的浮点数。

我考虑了以下实现,但我不认为拥有任意产品和数量的表格将是一个非常好的设计决策。

class Product(models.Model):
    name = models.CharField("Name", max_length=50)
    description = models.TextField("Description", blank=True)

class ProductOrder(models.Model):
    unit = "tonnes"
    product = models.ManyToManyField('Product')
    quantity = models.FloatField('Quantity')

class Order(models.Model):
    products = models.ManyToManyField('ProductOrder')
    date = models.DateField('Date')

我是否忽略了一个明显的解决方案?您将如何实现这种关系以生成最 DRY 的代码。 (PS。我不想有单独的产品和数量列表,并且必须隐含地依赖它们的订购。)

【问题讨论】:

    标签: sql django model foreign-keys relation


    【解决方案1】:

    在 django 中,您可以使用 through 创建这样的中间表并在其中维护特定于订单的属性。

    你可以实现它

    class Product(models.Model):
        name = models.CharField("Name", max_length=50)
        description = models.TextField("Description", blank=True)
    
    class Order(models.Model):
        products = models.ManyToManyField('Product', through="OrderDetail")
        date = models.DateField('Date')
    
    class OrderDetail(models.Model):
        unit = "tonnes"
        product = models.ForeignKey('Product')
        order = models.ForeignKey('Order')
        quantity = models.FloatField('Quantity')
    

    文档解释了如何使用和使用这种设计。

    【讨论】:

    • 所以我确实需要 OrderDetail 中的外键字段,但我宁愿引用 Order.OrderItems 而不是 Order.Products,因为这样我可以访问数量。
    • OrderDetail 中的 2 个外键是 django 对 through 关系所必需的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2018-06-25
    • 2013-06-05
    • 2023-03-29
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多