Spaces:
Running
Running
File size: 4,943 Bytes
3e8a166 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# 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
@admin.register(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
@admin.register(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
@admin.register(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
@admin.register(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
@admin.register(EndUser)
class EndUserAdmin(admin.ModelAdmin):
list_display = ('username', 'panel', 'marzban_user_id')
search_fields = ('username', 'marzban_user_id')
list_filter = ('panel',)
# تنظیمات ادمین برای مدل Plan
@admin.register(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
@admin.register(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
@admin.register(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
@admin.register(DiscountCode)
class DiscountCodeAdmin(admin.ModelAdmin):
list_display = ('code', 'admin', 'discount_percentage', 'is_active')
list_filter = ('is_active',)
search_fields = ('code', 'admin__username',)
# تنظیمات ادمین برای مدل TelegramUser
@admin.register(TelegramUser)
class TelegramUserAdmin(admin.ModelAdmin):
list_display = ('username', 'chat_id', 'admin_id')
search_fields = ('username', 'chat_id')
# تنظیمات ادمین برای مدل SecurityToken
@admin.register(SecurityToken)
class SecurityTokenAdmin(admin.ModelAdmin):
list_display = ('admin_id', 'token', 'expiration_date')
search_fields = ('admin_id', 'token')
# تنظیمات ادمین برای مدل PushSubscription
@admin.register(PushSubscription)
class PushSubscriptionAdmin(admin.ModelAdmin):
list_display = ('user', 'created_at')
search_fields = ('user__username',)
# تنظیمات ادمین برای مدل PaymentMethod
@admin.register(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
@admin.register(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
@admin.register(PaymentDetail)
class PaymentDetailAdmin(admin.ModelAdmin):
list_display = ('admin_level_3', 'card_number', 'wallet_address')
search_fields = ('admin_level_3__user__username',)
|