gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:24:27 24 4
gpt4 key购买 nike

我的网站目前仅在一个项目表上进行了调整,可以处理添加到购物车、从购物车中删除以及创建订单等操作。我想向网站添加不同的产品,因此我需要创建一个新表来处理其他项目。问题是,我不太确定如何在我的网站上正确实现这一点,因此添加到购物车和创建订单之类的操作也适用于该新表。

这就是第一个 Item 表的模型:

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

任何人都可以帮助我让它与名为 Accessory 的新表一起使用吗?

最佳答案

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

如果您这样做,与 Item 表相关的所有功能也将由 Accessory 表继承。我认为这会减少改变逻辑的成本和开销。

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

您甚至可以使用连接的 Item 记录作为 Accessory 模型的 primary_key

关于python - 调整当前代码以便能够将新表中的项目添加到购物篮中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60234166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com