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

我的模型中有三个类别,每个类别都有价格。我想创建 Cart 对象。我如何使用 ManToManyField 在一个 CartItem 中传递所有 3 个。


models.py


class 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(模型。模型):


精慕HU
浏览 107回答 1
1回答

莫回无

如果所有三个模型都具有相同的属性,表示相同的对象,但它只改变了对象的“类别”,那么为什么不只创建一个具有您选择类型的类别的模型呢?如果将来有必要,您将能够扩展到许多其他类别: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 itemsmen_items = Item.objects.filter(type="M")  # women itemskids_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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python