Python 调整当前代码,以便能够将新表中的项目添加到购物篮中

Python 调整当前代码,以便能够将新表中的项目添加到购物篮中,python,django,Python,Django,我的网站目前只适合于处理添加到购物车、从购物车中删除和创建订单等事项,只针对一个项目表。我想向站点添加不同的产品,所以我需要创建一个新表,用于处理其他项目。问题是,我真的不确定如何在我的网站上正确地实现这一点,所以像添加到购物车和创建订单这样的事情也可以在新表中使用 这就是第一个项目表的模型: class Item(models.Model): title = models.CharField(max_length=100) price = models.FloatField() d

我的网站目前只适合于处理添加到购物车、从购物车中删除和创建订单等事项,只针对一个项目表。我想向站点添加不同的产品,所以我需要创建一个新表,用于处理其他项目。问题是,我真的不确定如何在我的网站上正确地实现这一点,所以像添加到购物车和创建订单这样的事情也可以在新表中使用

这就是第一个项目表的模型:

class Item(models.Model):
  title = models.CharField(max_length=100)
  price = models.FloatField()
  discount_price = models.FloatField(blank=True, null=True)
  category = models.ManyToManyField(Category)
  label = models.CharField(choices=LABEL_CHOICES, max_length=1)
  slug = models.SlugField()
  description = models.TextField()
  image = models.ImageField()

  def __str__(self):
      return self.title

  def get_absolute_url(self):
      return reverse("core:product", kwargs={
          'slug': self.slug
      })

  def get_add_to_cart_url(self):
      return reverse("core:add-to-cart", kwargs={
          'slug': self.slug
      })

  def get_remove_from_cart_url(self):
      return reverse("core:remove-from-cart", kwargs={
          'slug': self.slug
      })
将项目添加到购物车时,它会转到下表:

class OrderItem(models.Model):
  user = models.ForeignKey(settings.AUTH_USER_MODEL,
                         on_delete=models.CASCADE)
  ordered = models.BooleanField(default=False)
  item = models.ForeignKey(Item, on_delete=models.CASCADE)
  quantity = models.IntegerField(default=1)
我能不能给这个表添加一个新的外键,一切都会正常工作?如何处理像从一个表添加产品这样的事情?那么,另一个的字段将为空

订单型号:

class Order(models.Model):
  user = models.ForeignKey(settings.AUTH_USER_MODEL,
                         on_delete=models.CASCADE)
  ref_code = models.CharField(max_length=20, blank=True, null=True)
  items = models.ManyToManyField(OrderItem)
  start_date = models.DateTimeField(auto_now_add=True)
  ordered_date = models.DateTimeField()
  ordered = models.BooleanField(default=False)
  shipping_address = models.ForeignKey(
      'Address', related_name='shipping_address', on_delete=models.SET_NULL, blank=True, null=True)
最后是新表,它将存储其他项:

class Accessory(models.Model):
  title = models.CharField(max_length=100)
  price = models.FloatField()
  discount_price = models.FloatField(blank=True, null=True)
  category = models.ManyToManyField(Category)
  label = models.CharField(choices=LABEL_CHOICES, max_length=1)
  slug = models.SlugField()
  description = models.TextField()
  image = models.ImageField()

任何人都可以帮我把这张表与名为附件的新表一起使用?

查看您的
项目和
附件
模型定义,这两个看起来非常相似。我的建议是在
附件
项目
表之间创建一个
OneToOne
关系,这样您就不需要处理这种冗余

如果您这样做,与
项目
表相关的所有功能也将被
附件
表继承。我认为这将减少改变逻辑的成本和管理费用

class Accessory(models.Model):
    item = models.OneToOneField(Item, on_delete=models.CASCADE)
    ...
    # other fields that will differ between Accessory and Item

您甚至可以使用连接的
记录作为您的
附件
型号的
主键

在进行迁移并进入管理面板后,当我尝试在进行迁移后添加新附件时,我收到了一个错误
没有这样的列:core\u附件.Item\u id
,您应该通过运行
python manage.py migrate
命令来应用它们。我这样做了,并且得到了一条控制台消息:
没有要应用的迁移。
好的,我得到了一个新的数据库,它现在可以工作了,但这里有一个问题-我可以有一个不同的附件类别表吗?你可以在
附件
模型中添加一个
类别
字段。但您应小心使用
附件
自己的类别,并避免使用
ac.item.category