如何在django中组合两个表

ybzsozfc  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(276)

有两张table
例如水烟和烟草
对于篮子模型,你需要把这两个模型结合起来
例如:

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

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

和订单项模型:

class OrderItem(model.Model):

而在这里我需要通过前两个模型,作为一个产品,如何做到这一点?i、 e.将水烟和烟草混合成一体
请帮帮我

svujldwt

svujldwt1#

如果我理解正确,你想 Basket 存储到其他类型的链接的模型?您可以通过创建每个购物项目继承自的父模型来实现,也可以通过使用 GenericForeignKey 它允许指向任何模型对象。共享父模型可能更好,因为您不必为诸如 name , price 等等。

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)
plicqrtu

plicqrtu2#

我认为在这种情况下,您可能应该考虑构建单个产品模型,并将类型属性与产品类型分开。这样,您就可以fk到一个单一的产品模型与您的订单项目模型。
像这样:
型号.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)
    ....

相关问题