如何在django中组合两个表

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

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

  1. class Hookah(model.Model):
  2. name = models.Charfield()
  3. description = .....
  4. price = .......
  5. class Tabacco(model.Model):
  6. name = models.Charfield()
  7. description = .....
  8. price = .......

和订单项模型:

  1. class OrderItem(model.Model):

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

svujldwt

svujldwt1#

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

  1. class ShoppingItem(model.Model)
  2. name = models.Charfield()
  3. description = .....
  4. price = .......
  5. class Hookah(ShoppingItem):
  6. height = ....
  7. class Tabacco(ShoppingItem):
  8. flavour = ....

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

  1. class OrderItem(model.Model): # info on a single ordered item
  2. item = models.ForeignKey(ShoppingItem, on_delete=models.DO_NOTHING)
  3. class Basket(model.Model): # basket of many `ShoppingItem`
  4. items = models.ManyToManyField(ShoppingItem)
展开查看全部
plicqrtu

plicqrtu2#

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

  1. class Type(models.Model):
  2. ...
  3. name = models.CharField(max_length=50)
  4. ...
  5. class Product(models.Model)
  6. name = models.CharField(max_length=150)
  7. description = models.TextField()
  8. type = models.ForeignKey(Type, on_delete=models.DO_NOTHING)
  9. class Order(models.Model):
  10. ...
  11. product = models.ForeignKey(Product, on_delete=models.DO_NOTHING)
  12. ....
展开查看全部

相关问题