Как решить Прямое присвоение прямой стороне множества "многие ко многим" запрещено. Вместо этого используйте cart.set() Ошибка?
В моем коде cart является классом модели, где products является ForeignKey, а в классе модели OrderItem, где cart является ManyToManyField. Когда я хочу сохранить OrderItemForm, возникает описанная выше ошибка. models.py
class OrderItem(BaseModel):
user = models.ForeignKey(User, on_delete=models.CASCADE)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
cart = models.ManyToManyField(Cart, blank=True)
name = models.CharField(max_length=200)
district = models.ForeignKey(District, on_delete=models.CASCADE)
city = models.CharField(max_length=200)
postal_code = models.SmallIntegerField()
area = models.TextField()
phone = models.CharField(max_length=12)
status = models.CharField(max_length=20, choices=STATUS_CHOICE, default="accepted",blank=True, null=True)
email = models.EmailField()
def __str__(self):
return self.user.email
Views.py
def checkout(request):
context={}
subtotal =0
forms = OrderItemForm()
context['forms'] = forms
if request.user.is_authenticated:
user = request.user
cart = Cart.objects.filter(user=user).order_by('-id')
for product in cart:
subtotal += product.total_cost
context['subtotal'] = subtotal
customer = Customer.objects.get(user=user)
if request.POST:
form = OrderItemForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
district = form.cleaned_data['district']
city = form.cleaned_data['city']
postal_code = form.cleaned_data['postal_code']
area = form.cleaned_data['area']
phone = form.cleaned_data['phone']
email = form.cleaned_data['email']
for c in cart:
instance = OrderItem(user=user, cart=cart, customer=customer, name=name, district=district, city=city, postal_code=postal_code, area=area, phone=phone, email=email).save()
# instance.cart_for_help.add(cart)
c.delete()
else:
messages.warning(request, form.error)
return render(request, 'checkout.html', context)
Вам нужно использовать .set(cart) вместо этого.
instance.set(cart)
Вам нужно использовать .set(cart) вместо этого.
instance.set(cart)