Почему метод save() должен иметь аргумент self в django?
Я пытаюсь решить эту проблему уже более 3 дней, но пока не могу ее решить. Я знаю самоиспользование для метода, который находится под классом, но я работаю с базовым представлением метода, так почему эта ошибка возникает, когда я пытаюсь сохранить модель OrderItem?
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():
instance = OrderItemForm.save(commit=False)
instance.user = user
instance.customer = customer
instance.cart = cart
instance.save()
else:
messages.warning(request, form.errors)
return render(request, 'checkout.html', context)
ошибка командной строки:
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\bitspirits\rndm\shop\views.py", line 76, in checkout
instance = OrderItemForm.save(commit=False)
TypeError: save() missing 1 required positional argument: 'self'
Необходимо инициировать экземпляр класса перед вызовом метода на нем. Только статический метод можно вызвать без создания экземпляра класса.
Вам необходимо изменить строку:
instance = OrderItemForm.save(commit=False)
to
instance = form.save(commit=False)
поскольку form является экземпляром OrderItemForm
или
instance = OrderItemForm()
зависит от того, что именно вы хотите