38266-vm/core/views.py
Flatlogic Bot 6aa80a21bb Store.1
2026-02-07 10:18:20 +00:00

98 lines
3.2 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from .models import Product, Category, Order, OrderItem
from django.contrib import messages
def index(request):
query = request.GET.get('q')
category_id = request.GET.get('category')
products = Product.objects.all().order_by('-created_at')
categories = Category.objects.all()
if query:
products = products.filter(title__icontains=query) | products.filter(description__icontains=query)
if category_id:
products = products.filter(category_id=category_id)
context = {
'products': products,
'categories': categories,
'selected_category': int(category_id) if category_id and category_id.isdigit() else None,
'query': query
}
return render(request, 'core/index.html', context)
def product_detail(request, pk):
product = get_object_or_404(Product, pk=pk)
related_products = Product.objects.filter(category=product.category).exclude(pk=pk)[:4]
return render(request, 'core/product_detail.html', {
'product': product,
'related_products': related_products
})
def add_to_cart(request, pk):
product = get_object_or_404(Product, pk=pk)
cart = request.session.get('cart', {})
product_id = str(pk)
if product_id in cart:
cart[product_id]['quantity'] += 1
else:
cart[product_id] = {
'title': product.title,
'price': str(product.price),
'quantity': 1,
'image_url': product.image_url
}
request.session['cart'] = cart
messages.success(request, f"{product.title} added to cart.")
return redirect('cart_detail')
def cart_detail(request):
cart = request.session.get('cart', {})
total = sum(float(item['price']) * item['quantity'] for item in cart.values())
return render(request, 'core/cart.html', {'cart': cart, 'total': total})
def remove_from_cart(request, pk):
cart = request.session.get('cart', {})
product_id = str(pk)
if product_id in cart:
del cart[product_id]
request.session['cart'] = cart
messages.info(request, "Item removed from cart.")
return redirect('cart_detail')
@login_required
def checkout(request):
cart = request.session.get('cart', {})
if not cart:
messages.warning(request, "Your cart is empty.")
return redirect('index')
total = sum(float(item['price']) * item['quantity'] for item in cart.values())
# Create Order
order = Order.objects.create(user=request.user, total_amount=total)
# Create OrderItems
for product_id, item in cart.items():
product = get_object_or_404(Product, pk=product_id)
OrderItem.objects.create(
order=order,
product=product,
quantity=item['quantity'],
price=item['price']
)
# Update stock
if product.stock >= item['quantity']:
product.stock -= item['quantity']
product.save()
# Clear cart
request.session['cart'] = {}
return render(request, 'core/checkout_success.html', {'order': order})