为了账号安全,请及时绑定邮箱和手机立即绑定

使用 ManToManyField() 在 Django 中创建购物车

使用 ManToManyField() 在 Django 中创建购物车

精慕HU 2023-04-11 16:08:42
我的模型中有三个类别,每个类别都有价格。我想创建 Cart 对象。我如何使用 ManToManyField 在一个 CartItem 中传递所有 3 个。models.pyclass Women(models.Model):    photo = models.ImageField(upload_to='media')    title = models.CharField(max_length=20)    description = models.CharField(max_length=150)    price = models.IntegerField()    objects = models.manager    def __str__(self):        return self.title    class Meta:        verbose_name_plural = 'Women'class Men(models.Model):    photo = models.ImageField(upload_to='media')    title = models.CharField(max_length=20)    price = models.IntegerField()    description = models.CharField(max_length=150)    objects = models.manager    def __str__(self):        return self.title    class Meta:        verbose_name_plural = 'Men'class Kids(models.Model):    photo = models.ImageField(upload_to='media')    title = models.CharField(max_length=20)    price = models.IntegerField()    description = models.CharField(max_length=150)    objects = models.manager    def __str__(self):        return self.title    class Meta:        verbose_name_plural = 'Kids'我想创造类购物车(模型。模型):和类 CartItem(模型。模型):
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

如果所有三个模型都具有相同的属性,表示相同的对象,但它只改变了对象的“类别”,那么为什么不只创建一个具有您选择类型的类别的模型呢?如果将来有必要,您将能够扩展到许多其他类别:


class Item(models.Model):

    # add the choices:

    WOMEN = "W"

    MEN = 'M'

    KIDS = "K"

    SIGNED = "SI"

    TYPE = (

        (WOMEN, 'Women'),

        (MEN, 'Men'),

        (KIDS, 'Kids'),

    )

    photo = models.ImageField(upload_to='media')

    title = models.CharField(max_length=20)

    description = models.CharField(max_length=150)

    price = models.IntegerField()

    objects = models.manager

    type = models.CharField(max_length=1, choices=TYPE, default=WOMEN, )


    def __str__(self):

        return self.title

使用此代码,您将能够对所有项目进行排序,type以获取每个模型:


women_items = Item.objects.filter(type="W")  # women items

men_items = Item.objects.filter(type="M")  # women items

kids_items = Item.objects.filter(type="K")  # women items

您还需要知道,当您type在模板上打印属性时{{item.type}},您将在列表中看到文本TYPE。


这将使您更容易获得所需的东西,因此您只需要参考ItemM2M 关系上的模型。


我与购物车关系不大,但这可能是您要找的:


class CartItem(models.Model):

    item = models.ManyToManyField(Item)

    amount = models.PositiveIntegerField(default=1)


class Cart(models.Model):

    cart_item = models.ManyToManyField(CartItem)


查看完整回答
反对 回复 2023-04-11
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信