У меня есть корзина для покупок, и я хочу добавить объект в эту корзину. Есть кнопка, которую я нажимаю, и когда это происходит, я хочу, чтобы запрос прошел.
Это то, что я хочу сделать в запросе POST (при нажатии кнопки):
- Проверьте элемент с тем же идентификатором, что и продукт, который я нажал.
- Создайте элемент CartItem с тем же элементом, что и элемент, который я проверял выше.
- Добавьте этот элемент корзины в мою корзинусвязан с моим профилем. (Работа еще не началась)
Модели:
class Item(models.Model):
name = models.CharField(max_length=100, null=True)
info = models.CharField(max_length=100, null=True)
price = models.IntegerField(default=0, null=True)
discount = models.CharField(max_length=100, null=True, blank=True)
discountPrice = models.IntegerField(default=0, null=True)
inStock = models.BooleanField(default=False)
imagefield = models.ImageField()
reviews = models.ManyToManyField(Review, blank=True, related_name="itemreview")
class Meta:
verbose_name_plural = 'Items'
def __str__(self):
return "{name}".format(name=self.name)
class CartItem(models.Model):
item = models.ForeignKey(Item, blank=True, related_name="CartItem", on_delete=models.CASCADE)
quantity = models.IntegerField(default=0, null=True)
price = models.IntegerField(default=0, null=True)
class Meta:
verbose_name_plural = 'Cart Items'
def __str__(self):
return self.item.name
def get_total_item_price(self):
return self.quantity * self.item.price
class ShoppingCart(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
items = models.ManyToManyField(CartItem, blank=True, related_name="orderitem")
class Meta:
verbose_name_plural = 'Shopping Carts'
def __str__(self):
return self.user.username
def get_total(self):
total = 0
for cart_item in self.items.all():
total += cart_item.get_total_item_price()
return total
@receiver(post_save, sender=User)
def create_user_data(sender, update_fields, created, instance, **kwargs):
if created:
user = instance
profile = ShoppingCart.objects.create(user=user)
Просмотры и URL:
def add_to_cart(request, item_id):
if request.method == 'POST':
#create a cartitem
selectedItem = Item.objects.filter(id=item_id)
theQuantity = 1
thePrice = selectedItem.price
cartItem = CartItem(quantity=theQuantity, price=thePrice)
cartItem.save()
cartItem.item.add(selectedItem)
#add that cartitem to the cart
return redirect('landing-page')
urlpatterns = [
path('', views.landingPage, name='landing-page'),
path('product/<int:itemID>', views.singleProduct, name='singleProduct'),
path('cart', views.shoppingCart, name='cart'),
path('add-to-cart/<int:item_id>', views.add_to_cart, name="addToCart"),
path('quantity-up/<int:cartitem_id>', views.change_quantity_up, name="quantity-upp"),
path('quantity-down/<int:cartitem_id>', views.change_quantity_down, name="quantity-down"),
]
Вот так я сделал запрос и внутри htmlэто кнопка с href = "{% url 'addToCart' item.id%}"

html:
<a class="button primary-btn" href="{% url 'addToCart' item.id %}">Add to Cart</a>