Django中有商品计数的购物车M2M模型

Django中有商品计数的购物车M2M模型,django,django-models,many-to-many,shopping-cart,Django,Django Models,Many To Many,Shopping Cart,我正在尝试为我的一个宠物项目创建购物车系统 我有配置文件模型,它是内置用户模型的扩展。我的档案模型有购物车字段,该字段是与另一个应用程序中的服装模型的M2M关系,代表我的产品。在代码中,Profile模型如下所示: class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile") ... shopping_car

我正在尝试为我的一个宠物项目创建购物车系统

我有
配置文件
模型,它是内置
用户
模型的扩展。我的
档案
模型有
购物车
字段,该字段是与另一个应用程序中的
服装
模型的M2M关系,代表我的产品。在代码中,
Profile
模型如下所示:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")

    ...
    shopping_cart = models.ManyToManyField(
        to=Clothing,
        related_name="shopping_cart",
        blank=True
    )
要将新项目添加到
购物车
字段,我使用
请求
对象,该对象具有
用户
对象,而该对象又具有我需要的
配置文件

request.user.profile.shopping\u cart.add(项目)

所以,我想让用户将同一物品的多个实例添加到
购物车中,然后用
集合中的
计数器计算用户在其
购物车中的物品数量和种类

然后,如果我在
购物车
中添加了3个项目,我希望这样的输出(使用
集合
中的
计数器
):

计数器({
:3})

但我明白了:

计数器({
:1})


现在,谁能解释为什么会发生这种情况,因为我认为M2M意味着我可以添加同一项的多个实例,它将显示所有添加的项。
UPD 1: 中间型号:

class ShoppingCart(models.Model):
    item = models.ForeignKey(to=Clothing, on_delete=models.CASCADE)
    in_profile = models.ForeignKey(to="Profile", on_delete=models.CASCADE)
    count = models.PositiveSmallIntegerField(
        default=1,
        blank=False,
        null=False
    )

    def __str__(self):
        return self.item.title
我提出请求的部分:

def proceed_request(self, request):
    item = Clothing.objects.get(pk=request.POST.get("id"))
    related_field = request.user.profile.shopping_cart
    if item and item in related_field.all():
        related_field.count() += 1 # Throws 'SyntaxError: can't assign to function call' error.
        related_field.save()
        messages.add_message(request, messages.SUCCESS, f"{item.title} has successfully uppdated!")
        return HttpResponse(status=200)
    related_field.add(item)
    messages.add_message(request, messages.SUCCESS, f"{item.title} has successfully added to {self.verbose_field_name}!")
    return HttpResponse(status=200)
UPD 2: 更新了“继续请求”功能。现在一切正常

def proceed_request(self, request):
    item = Clothing.objects.get(pk=request.POST.get("id"))
    related_model = request.user.profile.shopping_cart
    if item and item in related_model.all():
        cart_item = ShoppingCart.objects.get(item=item)
        cart_item.count += 1
        cart_item.save()
        messages.add_message(request, messages.SUCCESS, f"{item.title} has successfully uppdated!")
        return HttpResponse(status=200)
    ShoppingCart.objects.create(item=item, in_profile=request.user.profile)
    messages.add_message(request, messages.SUCCESS, f"{item.title} has successfully added to {self.verbose_model_name}!")
    return HttpResponse(status=200)

使用M2M,您可以添加多个不同的服装项目,但多次添加同一项目不会复制关系。请查看通过使用
计数
字段添加到关系:


好的,我对此进行了一点测试,但我如何增加
计数
字段?当我试图将1添加到自身时,它会抛出一个错误:“SyntaxError:can not assign to function call”。还使用当前代码更新了帖子。您需要
相关的\u field.count+=1
。这是一个属性,不是一个方法。更新了问题。您的示例抛出了+=:“method”和“int”的
TypeError:不支持的操作数类型。
。我不明白为什么会出现此错误。我想我需要看完整的代码。