У меня есть форма, которая создает корзину с текстом «Случайно» в поле символа, если не создан объект корзины. Это только для того, чтобы получить идентификатор этого недавно объекта, если он еще не создан.
cart = Cart.objects.get(id=cart_id)
Я получаю сообщение об ошибке, говорящее, что этот запрос генерирует ошибку, однако я могу видеть значение cart_id
как файл cookie, поэтому запрос должен выполняться без проблем. Но это не соответствует сообщению об ошибке.
Тип исключения: DoesNotExist
Значение исключения: запрос на сопоставление корзины не существует.
![enter image description here](https://i.stack.imgur.com/n6mSm.png)
Как вы можете видеть на мой взгляд, я использую это:
cart_id = self.request.COOKIES.get('cart_id')
if not cart_id:
cart = Cart.objects.create(cart_id="Random")
cart_id = cart.id
cart = Cart.objects.get(id=cart_id)
Чтобы получить cookie cart_id
, если он не существует, я создал Cart object
со случайным текстом, только чтобы получить его идентификатор.
Почему я получаю ошибку?
View.py
class StepOneView(FormView):
form_class = StepOneForm
template_name = 'shop/medidas-cantidades.html'
success_url = 'subir-arte'
def get_initial(self):
# pre-populate form if someone goes back and forth between forms
initial = super(StepOneView, self).get_initial()
initial['size'] = self.request.session.get('size', None)
initial['quantity'] = self.request.session.get('quantity', None)
initial['product'] = Product.objects.get(
category__slug=self.kwargs['c_slug'],
slug=self.kwargs['product_slug']
)
return initial
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['product'] = Product.objects.get(
category__slug=self.kwargs['c_slug'],
slug=self.kwargs['product_slug']
)
return context
def form_invalid(self, form):
print('Step one: form is NOT valid')
def form_valid(self, form):
cart_id = self.request.COOKIES.get('cart_id')
if not cart_id:
cart = Cart.objects.create(cart_id="Random")
cart_id = cart.id
cart = Cart.objects.get(id=cart_id)
item = CartItem.objects.create(
size=form.cleaned_data.get('size'),
quantity=form.cleaned_data.get('quantity'),
product=Product.objects.get(
category__slug=self.kwargs['c_slug'],
slug=self.kwargs['product_slug']
),
cart=cart
)
response = HttpResponseRedirect(self.get_success_url())
response.set_cookie("cart_id", cart_id)
response.set_cookie("item_id", item.id)
return response
models.py
class Cart(models.Model):
cart_id = models.CharField(max_length=100)
date_added = models.DateField(auto_now_add=True)
class Meta:
db_table = 'Cart'
ordering = ['date_added']
def __str__(self):
return str(self.id)