如何在Django中合并两个表

时间:2020-05-31 14:41:04

标签: sql sql-server django django-models

有两个表

例如水烟和烟草

对于购物篮模型,您需要将这两个模型结合起来,帮助

例如:

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

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

和OrderItem模型:

class OrderItem(model.Model):

在这里,我需要传递前两个模型,作为一个产品,该怎么做? 即将水烟筒和Tabacoo合并成一个

请帮助我

2 个答案:

答案 0 :(得分:0)

我认为在这种情况下,您可能应该考虑构建单个产品模型,并具有将产品类型分开的type属性。这样,您就可以将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)
    ....

答案 1 :(得分:0)

如果我的理解正确,那么您想要一个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)
相关问题