#django
Вопрос:
Моя функция добавления в корзину работала, но я внес некоторые изменения в модель продуктов, которые не были связаны с корзиной. Я создал функцию только для добавления значений по умолчанию. Теперь моя функция добавления в корзину не работает. Я даже добавил функцию печати в начале функции, и она никогда не печатается. Моя функция просмотра работает (для просмотра корзины), но не добавляет.
views.py приложение в корзине:
def add_to_cart(request, slug):
print("add_to_cart pressed")
request.session.set_expiry(100000000)
try:
the_id = request.session['cart_id']
except:
#create cart id
new_cart = Cart()
new_cart.save()
request.session['cart_id'] = new_cart.id
the_id = new_cart.id
cart = Cart.objects.get(id=the_id)
try:
product = Product.objects.get(slug=slug)
except Product.DoesNotExist:
pass
except:
pass
product_variations = []
if request.method == 'POST':
qty = request.POST['qty']
for item in request.POST:
key = item
val = request.POST[key]
try:
v = Variation.objects.get(product=product, category__iexact=key, title__iexact=val)
product_variations.append(v)
except:
pass
cart_item = CartItem.objects.create(cart=cart, product=product)
if len(product_variations) > 0:
cart_item.variations.add(*product_variations)
cart_item.quantity = qty
cart_item.save()
print("cart item added")
return HttpResponseRedirect(reverse("carts:cart"))
return HttpResponseRedirect(reverse("carts:cart"))
urls.py приложение в корзине:
app_name='carts'
urlpatterns =[
path('cart/', views.view, name='cart'),
path('cart/<id>/', views.remove_from_cart, name='remove_from_cart'),
path('cart/<slug:slug>/', views.add_to_cart, name='add_to_cart'),
]
Модели.py в приложении «корзина»
class Cart(models.Model):
total = models.DecimalField(max_digits=100, decimal_places=2, default=0.00)
timestamp = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
active = models.BooleanField(default=True)
def __str__(self):
return "Cart id: %s" %(self.id)
class CartItem(models.Model):
cart = models.ForeignKey(Cart, on_delete=models.CASCADE, null=True, blank=True)
product = models.ForeignKey(Product,on_delete=models.CASCADE)
variations = models.ManyToManyField(Variation, blank=True)
quantity = models.IntegerField(default=1)
line_total = models.DecimalField(default=10.99, max_digits=100, decimal_places=2)
#notes = models.TextField(null=True, blank=True)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now=True)
#objects = CartManager()
def __str__(self):
try:
return str(self.cart.id)
except:
return self.product.name
detail product page with add to cart button (just a snippet for the url redirection):
<form class="form pull-right" method="POST" action="{% url 'carts:add_to_cart' product.slug %}">
{% csrf_token %}
<input class="btn btn-outline-dark" type="submit" value="Add to Cart">
<input class="form-control" type="number" name="qty" value="1">
{% if product.variation_set.all %}
{% if product.variation_set.sizes %}
<select class="form-control" name="size">
{% for item in product.variation_set.sizes %}
<option value="{{ item.title|lower }}">{{ item.title|capfirst }}</option>
{% endfor %}
</select>
{% endif %}
{% if product.variation_set.colors %}
<select class="form-control" name="color">
{% for item in product.variation_set.colors %}
<option value="{{ item.title|lower }}">{{ item.title|capfirst }}</option>
{% endfor %}
</select>
{% endif %}
{% endif %}
</form>
I don’t understand what happened after modifying products model. The add_to_cart function isn’t even being called. Thanks for any help.
примечание: при изменении модели продуктов моя база данных полностью вышла из строя, поэтому мне пришлось удалить всю базу данных, выполнить изменения и перенести ее, чтобы перестроить. Я не уверен, что это то, что сломало его.
дальнейшее редактирование: Я добавил некоторые javascript, чтобы определить, была ли нажата кнопка. Предупреждение никогда не срабатывало. Так что, возможно, это проблема с формой. Я не уверен.