Spaces:
Running
Running
# management/admin.py | |
# -*- coding: utf-8 -*- | |
from django.contrib import admin | |
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin | |
from .models import ( | |
CustomUser, | |
AdminLevel2, | |
Panel, | |
License, | |
EndUser, | |
Plan, | |
Subscription, | |
Payment, | |
DiscountCode, | |
TelegramUser, | |
SecurityToken, | |
PushSubscription, | |
PaymentMethod, | |
PaymentSetting, | |
PaymentDetail | |
) | |
# تنظیمات ادمین برای مدل CustomUser | |
class CustomUserAdmin(BaseUserAdmin): | |
list_display = ('username', 'email', 'role', 'is_staff') | |
list_filter = ('role', 'is_staff', 'is_superuser', 'is_active') | |
search_fields = ('username', 'email') | |
ordering = ('username',) | |
fieldsets = BaseUserAdmin.fieldsets + ( | |
('اطلاعات نقش', {'fields': ('role', 'marzban_admin_id')}), | |
) | |
# تنظیمات ادمین برای مدل AdminLevel2 | |
class AdminLevel2Admin(admin.ModelAdmin): | |
# FIXED: 'marzban_api_token' does not exist in the model | |
list_display = ('user', 'telegram_chat_id', 'license_expiry_date') | |
search_fields = ('user__username',) | |
# تنظیمات ادمین برای مدل Panel | |
class PanelAdmin(admin.ModelAdmin): | |
# FIXED: 'url' and 'api_token' do not exist. Used correct fields. | |
list_display = ('name', 'owner', 'marzban_host') | |
search_fields = ('name', 'owner__username') | |
# تنظیمات ادمین برای مدل License | |
class LicenseAdmin(admin.ModelAdmin): | |
# FIXED: Used correct field names from the model ('key', 'owner', etc.) | |
list_display = ('key', 'owner', 'is_active', 'created_at', 'expiry_date') | |
list_filter = ('is_active',) | |
search_fields = ('key', 'owner__username') | |
# تنظیمات ادمین برای مدل EndUser | |
class EndUserAdmin(admin.ModelAdmin): | |
list_display = ('username', 'panel', 'marzban_user_id') | |
search_fields = ('username', 'marzban_user_id') | |
list_filter = ('panel',) | |
# تنظیمات ادمین برای مدل Plan | |
class PlanAdmin(admin.ModelAdmin): | |
list_display = ('name', 'panel', 'price', 'duration_days', 'data_limit_gb', 'is_active') | |
list_filter = ('is_active', 'panel') | |
search_fields = ('name',) | |
# تنظیمات ادمین برای مدل Subscription | |
class SubscriptionAdmin(admin.ModelAdmin): | |
list_display = ('end_user', 'plan', 'status', 'start_date', 'end_date', 'remaining_data_gb') | |
# FIXED: 'is_trial' does not exist in the model | |
list_filter = ('status', 'plan', 'panel') | |
search_fields = ('end_user__username',) | |
date_hierarchy = 'start_date' | |
# تنظیمات ادمین برای مدل Payment | |
class PaymentAdmin(admin.ModelAdmin): | |
list_display = ('subscription', 'admin', 'amount', 'status', 'created_at') | |
# IMPROVED: Filtering on image/text fields is not useful. Using status instead. | |
list_filter = ('status', 'admin') | |
search_fields = ('subscription__end_user__username',) | |
date_hierarchy = 'created_at' | |
# تنظیمات ادمین برای مدل DiscountCode | |
class DiscountCodeAdmin(admin.ModelAdmin): | |
list_display = ('code', 'admin', 'discount_percentage', 'is_active') | |
list_filter = ('is_active',) | |
search_fields = ('code', 'admin__username',) | |
# تنظیمات ادمین برای مدل TelegramUser | |
class TelegramUserAdmin(admin.ModelAdmin): | |
list_display = ('username', 'chat_id', 'admin_id') | |
search_fields = ('username', 'chat_id') | |
# تنظیمات ادمین برای مدل SecurityToken | |
class SecurityTokenAdmin(admin.ModelAdmin): | |
list_display = ('admin_id', 'token', 'expiration_date') | |
search_fields = ('admin_id', 'token') | |
# تنظیمات ادمین برای مدل PushSubscription | |
class PushSubscriptionAdmin(admin.ModelAdmin): | |
list_display = ('user', 'created_at') | |
search_fields = ('user__username',) | |
# تنظیمات ادمین برای مدل PaymentMethod | |
class PaymentMethodAdmin(admin.ModelAdmin): | |
list_display = ('name', 'is_active', 'can_be_managed_by_level3') | |
list_filter = ('is_active', 'can_be_managed_by_level3') | |
# تنظیمات ادمین برای مدل PaymentSetting | |
class PaymentSettingAdmin(admin.ModelAdmin): | |
list_display = ('admin_level_3', 'payment_method', 'is_active') | |
list_filter = ('is_active', 'payment_method') | |
search_fields = ('admin_level_3__user__username',) | |
# تنظیمات ادمین برای مدل PaymentDetail | |
class PaymentDetailAdmin(admin.ModelAdmin): | |
list_display = ('admin_level_3', 'card_number', 'wallet_address') | |
search_fields = ('admin_level_3__user__username',) | |