77 lines
3.2 KiB
Python
77 lines
3.2 KiB
Python
from django.contrib import admin
|
|
|
|
# Register your models here.
|
|
|
|
from .models import *
|
|
|
|
admin.site.register(Customer)
|
|
admin.site.register(PhoneNumber)
|
|
admin.site.register(ProductCategory)
|
|
admin.site.register(Product)
|
|
admin.site.register(ProductInStore)
|
|
admin.site.register(Factor)
|
|
admin.site.register(FactorIteam)
|
|
admin.site.register(VisitQueue)
|
|
admin.site.register(ArticleType)
|
|
admin.site.register(Article)
|
|
admin.site.register(Sarresid)
|
|
admin.site.register(Action)
|
|
admin.site.register(CacheTable)
|
|
admin.site.register(ProductStockHistory)
|
|
|
|
|
|
@admin.register(StoreTransferRequest)
|
|
class StoreTransferRequestAdmin(admin.ModelAdmin):
|
|
# ۱. حل مشکل لودینگ و هنگ کردن فرم (تبدیل منوی کشویی غولآسا به باکس شناسه عددی)
|
|
# این دستور فیلدهای پرجمعیت را به شدت بهینه و سبک میکند
|
|
raw_id_fields = ['out_transaction', 'in_transaction', 'product', 'requester', 'approver']
|
|
|
|
# ۲. ستونهایی که میخواهید در صفحه جدول (Changelist) نمایش داده شوند
|
|
list_display = [
|
|
'id',
|
|
'source_store',
|
|
'target_store',
|
|
'product',
|
|
'quantity',
|
|
'status',
|
|
'created_at',
|
|
'action_date'
|
|
]
|
|
|
|
# ۳. فیکس قطعی باگ N+1 (لود کردن روابط در یک کوئری واحد به جای صدها کوئری تودرتو برای __str__)
|
|
list_select_related = ['source_store', 'target_store', 'product', 'requester', 'approver']
|
|
|
|
# ۴. فیلترهای سمت راست صفحه (فقط روی فیلدهای کمجمعیت مثل وضعیت و انبار فیلتر بگذارید)
|
|
list_filter = ['status', 'source_store', 'target_store', 'created_at']
|
|
|
|
# ۵. باکس جستجوی بهینه شده
|
|
search_fields = ['id', 'desc', 'product__product_name', 'requester__username']
|
|
|
|
# ۶. غیرقابل ادیت کردن فیلدهای حساس مالی در پنل ادمین (اختیاری اما برای Enterprise الزامی است)
|
|
readonly_fields = ['created_at', 'updated_at']
|
|
|
|
class StoreRoomOwnerInline(admin.TabularInline):
|
|
"""
|
|
این کلاس باعث میشود مالکین انبار به صورت یک جدول کوچک
|
|
در داخل همان صفحه مدیریت انبار نمایش داده شوند.
|
|
"""
|
|
model = StoreRoomOwner
|
|
extra = 1 # تعداد ردیفهای خالی برای افزودن مالک جدید
|
|
verbose_name = "مالک انبار"
|
|
verbose_name_plural = "مالکین انبار"
|
|
|
|
@admin.register(StoreRoom)
|
|
class StoreRoomAdmin(admin.ModelAdmin):
|
|
list_display = ('store_name', 'get_owners_count')
|
|
search_fields = ('store_name',)
|
|
|
|
# فیلد user یک M2M معمولی است، پس filter_horizontal روی آن عالی کار میکند
|
|
filter_horizontal = ('user',)
|
|
|
|
# فیلد owners چون جدول واسط دارد، باید از طریق Inline مدیریت شود
|
|
inlines = [StoreRoomOwnerInline]
|
|
|
|
def get_owners_count(self, obj):
|
|
"""نمایش تعداد مالکین در لیست اصلی انبارها"""
|
|
return obj.owners.count()
|
|
get_owners_count.short_description = "تعداد مالکین" |