【问题标题】:how to combine two tables in django如何在 django 中合并两个表
【发布时间】:2020-09-18 21:42:41
【问题描述】:

有两个表

例如水烟和烟草

而对于篮子模型,你需要将这两个模型结合起来,帮助

例如:

class Hookah(model.Model):
    name = models.Charfield()
    description = .....
    price = .......

class Tabacco(model.Model):
    name = models.Charfield()
    description = .....
    price = .......

和 OrderItem 模型:

class OrderItem(model.Model):

而这里我需要通过前两个模型,作为一个产品,怎么做呢? 即将水烟和烟草合二为一

请帮帮我

【问题讨论】:

  • 如何组合它们?或许可以解释一下您正在尝试做什么,您尝试了什么,以及您尝试的结果与您的预期有何不同?
  • 如果有一个像水烟这样的类,我想创建一个篮子类,然后是类 OrderItem: product = models.Fk (Hookah),我需要结合 Hookah 和 Tabacco 并将它们传递给 OrderItem () 示例OrderItem: product = models.Fk (Hookah, Tobacco) 不知何故

标签: sql sql-server django django-models


【解决方案1】:

如果我理解正确,您想要一个 Basket 模型来存储指向其他类型的链接?您可以通过创建每个购物项目继承自的父模型来做到这一点,或者您可以使用允许指向任何模型对象的GenericForeignKey 来实现。共享父模型可能更好,因为您不必为诸如nameprice 等购物项目重复代码。

class ShoppingItem(model.Model)
    name = models.Charfield()
    description = .....
    price = .......

class Hookah(ShoppingItem):
    height = ....

class Tabacco(ShoppingItem):
    flavour = ....

然后您可以执行以下操作之一:

class OrderItem(model.Model):  # info on a single ordered item
    item = models.ForeignKey(ShoppingItem, on_delete=models.DO_NOTHING)

class Basket(model.Model):  # basket of many `ShoppingItem`
    items = models.ManyToManyField(ShoppingItem)

【讨论】:

    【解决方案2】:

    我认为在这种情况下,您可能应该考虑构建单个产品模型并使用类型属性来分隔产品类型。这样,您就可以使用您的订单项目模型 FK 到单个产品模型。

    类似这样的:

    models.py

    class Type(models.Model):
        ...
        name = models.CharField(max_length=50)
        ...
    
    
    class Product(models.Model)
        name = models.CharField(max_length=150)
        description = models.TextField()
        type = models.ForeignKey(Type, on_delete=models.DO_NOTHING)
    
    class Order(models.Model):
        ...
        product = models.ForeignKey(Product, on_delete=models.DO_NOTHING)
        ....
    

    【讨论】:

    • 此代码用于产品中的相同字段但我在 Hokaah 和 Tabacoo 中有不同的字段
    • 是的,这是有目的的。从归因/数据模型的角度来看,水烟和烟草之间有什么区别?在我看来,它们都是您打算销售的产品,因此将它们放在单独的模型中是没有意义的。
    • 他们有不同的领域
    • 通常,这是通过使用带有单独属性表/模型的主产品表/模型来处理的,因为产品的属性可能会有所不同,但产品需要的核心数据被视为产品不要。这样,您可以在 Order 模型/表中使用单个 FK,而无需增加复杂性。另一个想法是完全避免 FK 关系,只需根据需要在 Order 表中插入一个 ID 和一个类型属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2016-11-06
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多