Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么m2m的add()方法不适用于单个对象-django_Django_Python 3.x_Django Models_Django Forms_Django Views - Fatal编程技术网

为什么m2m的add()方法不适用于单个对象-django

为什么m2m的add()方法不适用于单个对象-django,django,python-3.x,django-models,django-forms,django-views,Django,Python 3.x,Django Models,Django Forms,Django Views,我试图用add方法将对象添加到m2m中,但它既没有显示错误,也没有添加项,我不明白为什么 以下是我的看法: class UpdateCartView(generic.UpdateView): model = Cart fields = ['products'] template_name = 'update_cart.html' success_url = reverse_lazy('carts:home') def form_valid(self,for

我试图用
add
方法将对象添加到m2m中,但它既没有显示错误,也没有添加项,我不明白为什么

以下是我的看法:

class UpdateCartView(generic.UpdateView):
    model = Cart
    fields = ['products']
    template_name = 'update_cart.html'
    success_url = reverse_lazy('carts:home')
    def form_valid(self,form):
        product = ProductCreateModel.objects.get(pk = self.request.POST.get('product'))
        size = Size.objects.get(pk = self.request.POST.get('size'))
        colour = Colour.objects.get(pk = self.request.POST.get('colour'))
        products =  Products.objects.create(product = product,
                size = size,
                quantity = int(self.request.POST.get('quantity')),
                colour = colour)
        product.save()
        cart = self.get_object()
        print(products)
        cart.products.add(products)
        cart.save()
        return super(UpdateCartView,self).form_valid(form)
    def get_object(self):
        cart_obj, cart_created = Cart.objects.new_or_get(self.request)
        return cart_obj
这是我的模型:

class Products(models.Model):
    product = models.ForeignKey(ProductCreateModel,on_delete=models.CASCADE,related_name='cart_product')
    quantity = models.PositiveIntegerField(default=1,validators=[MinValueValidator(1)])
    size    = models.ForeignKey(Size,related_name='cart_product_size',on_delete=models.CASCADE,null=True,blank=False)
    colour = models.ForeignKey(Colour,related_name='cart_product_colour',on_delete=models.CASCADE,null=True,blank=False)
    def __str__(self):
        return '{product}({quantity})'.format(product=self.product,quantity=self.quantity)


class Cart(models.Model):
    MESSAGE_CHOICES = (
        ('A' , 'Items are added to you cart'),
        ('R' , 'Items are removed from cart'),
        ('PC' , 'Price of some items has changed'),
    )
    messages    = models.CharField(max_length=1, choices=MESSAGE_CHOICES,null=True,blank=True)
    user        = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
    products    = models.ManyToManyField(Products, blank=True)
    subtotal    = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
    total       = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
    updated     = models.DateTimeField(auto_now=True)
    timestamp   = models.DateTimeField(auto_now_add=True)

    objects = CartManager()

    def __str__(self):
        return str(self.id)


def m2m_changed_cart_receiver(sender, instance, action, *args, **kwargs):
    if action == 'post_add' or action == 'post_remove' or action == 'post_clear':
        products = instance.products.all()
        total = 0
        for x in products:
            total += (x.product.final_price * x.quantity)
        if instance.subtotal != total:
            instance.subtotal = total
            instance.save()

def pre_save_cart_receiver(sender, instance, *args, **kwargs):
    if instance.subtotal > 0:
        instance.total = Decimal(instance.subtotal) * Decimal(1.08) # 8% tax
    else:
        instance.total = 0.00

一切正常,没有错误,也可以打印
产品
,但在我的管理面板中,显示空购物车意味着
cart.products.add(products)
未添加产品为什么

即使在刷新页面时?也要将您的模型添加到问题中,而且
product.save()
inside
form\u valid
方法中的行也没有用,因为我可以看到您在project object中没有更改任何内容是的,我尝试过刷新,但没有成功,它将我重定向到carts主页,在那里我看到了空的cart,也在管理中panel@scharette我添加了我的模型,我使用
products.save()
在尝试解决这个问题时,我认为如果使用
create()
,没有必要使用
save()
,对吗?