[英]ValueError at /addtodo/: Not able to add new items in todo-list
[英]Adjusting current code to be able to add items from new table to the basket
我的网站目前适用于处理诸如添加到购物车、从购物车中删除和创建订单之类的事情,仅在一个 Item 表上。 我想向站点添加不同的产品,因此我需要创建一个新表,用于处理其他项目。 问题是,我不确定如何在我的网站上正确实施它,因此添加到购物车和创建订单之类的事情也适用于该新表。
所以这就是第一个 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 的新表一起使用吗?
查看您的Item
和Accessory
模型定义,这两个看起来非常相似。 我的建议是在Accessory
和Item
表之间创建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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.