hai*_*der 6 python django python-3.x
当我尝试将当前登录的用户作为ManyToManyField.
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use user.set() instead.
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
视图.py
def add_to_cart(request , item):
name = item
size = request.POST.get("size")
extras = request.POST.get("extras")
c = Cart(item=name , size=size , extras=extras , user=request.user)
c.save()
return render(request , "orders/add_items.html" , {"message":f"{name} added to cart"})
Run Code Online (Sandbox Code Playgroud)
模型.py
class Cart(models.Model):
item = models.CharField(max_length=64)
size = models.DecimalField(max_digits=5,decimal_places=2)
extras = models.CharField(max_length=64 , null=True, blank=True)
user = models.ManyToManyField(User , related_name="member")
def __str__(self):
return f"{item} added by {user}"
Run Code Online (Sandbox Code Playgroud)
Ala*_*air 15
您需要先保存购物车,然后才能将商品添加到多对多字段。
c = Cart(item=name , size=size , extras=extras)
c.save()
c.user.add(request.user)
Run Code Online (Sandbox Code Playgroud)
也可以set()保存后使用。请注意,这将删除集合中未指定的任何相关用户(尽管在这种情况下它是一个新列表,因此没有任何列表)。
c.user.set([request.user]
Run Code Online (Sandbox Code Playgroud)
最后,您确定要为此使用多对多字段吗?这允许一个购物车属于多个用户。如果是这种情况,我会将字段命名为users,而不是user. 如果你只想要一个user购物车,那么我会用一个ForeignKey代替。您的 related_namemembers也没有意义。这用于获取与用户相关的购物车,因此我希望您可以使用它carts。