38652-vm/core/admin.py
2026-02-20 20:50:37 +00:00

68 lines
2.6 KiB
Python

from django.contrib import admin
from .models import Category, Vendor, Product
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = ('name', 'slug')
prepopulated_fields = {'slug': ('name',)}
@admin.register(Vendor)
class VendorAdmin(admin.ModelAdmin):
list_display = ('name', 'whatsapp_number', 'created_at')
prepopulated_fields = {'slug': ('name',)}
search_fields = ('name', 'whatsapp_number')
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(user=request.user)
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'vendor', 'category', 'price', 'stock', 'is_active', 'created_at')
list_filter = ('vendor', 'category', 'is_active')
prepopulated_fields = {'slug': ('name',)}
search_fields = ('name', 'vendor__name', 'category__name')
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
# Filter products by the vendor linked to the user
try:
vendor = request.user.vendor_profile
return qs.filter(vendor=vendor)
except:
return qs.none()
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
if not request.user.is_superuser:
# If a vendor is logged in, hide the 'vendor' field from the form
if 'vendor' in form.base_fields:
form.base_fields['vendor'].required = False
# Remove it from the displayed fields if it's there
# However, for simplicity, we'll just handle it in save_model
return form
def save_model(self, request, obj, form, change):
if not request.user.is_superuser:
# Automatically set the vendor if it's not set and the user is a vendor
try:
obj.vendor = request.user.vendor_profile
except:
pass
super().save_model(request, obj, form, change)
def get_fieldsets(self, request, obj=None):
fieldsets = super().get_fieldsets(request, obj)
if not request.user.is_superuser:
# Exclude vendor field from the form for vendors
for fieldset in fieldsets:
if 'vendor' in fieldset[1]['fields']:
# Create a new tuple without 'vendor'
new_fields = tuple(f for f in fieldset[1]['fields'] if f != 'vendor')
fieldset[1]['fields'] = new_fields
return fieldsets