POST-запрос Django в шаблоне (без формы или лучшего решения) - PullRequest
0 голосов
/ 22 октября 2019

У меня есть корзина для покупок, и я хочу добавить объект в эту корзину. Есть кнопка, которую я нажимаю, и когда это происходит, я хочу, чтобы запрос прошел.

Это то, что я хочу сделать в запросе POST (при нажатии кнопки):

  1. Проверьте элемент с тем же идентификатором, что и продукт, который я нажал.
  2. Создайте элемент CartItem с тем же элементом, что и элемент, который я проверял выше.
  3. Добавьте этот элемент корзины в мою корзинусвязан с моим профилем. (Работа еще не началась)

Модели:

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%}"

enter image description here

html:

    <a class="button primary-btn" href="{% url 'addToCart' item.id %}">Add to Cart</a> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...