diff --git a/backend/account/admin.py b/backend/account/admin.py index 6ea35fa..b909011 100644 --- a/backend/account/admin.py +++ b/backend/account/admin.py @@ -14,6 +14,8 @@ class UserAddressInLine(TabularInline): model = UserAddressModel extra = 0 tab = True + verbose_name = 'ادرس کاربر' + verbose_name_plural = 'ادرس های کاربر' @admin.register(User) class UserAdmin(BaseUserAdmin, ModelAdmin, ImportExportModelAdmin): @@ -24,18 +26,18 @@ class UserAdmin(BaseUserAdmin, ModelAdmin, ImportExportModelAdmin): ordering = [] inlines = [UserAddressInLine] list_filter = [] - search_fields = ['phone', 'first_name', 'last_name', ] - list_display = ['phone', 'email', 'is_superuser'] + search_fields = ['phone', 'first_name', 'last_name', 'full_name', 'email'] + list_display = ['full_name_display', 'phone', 'email', 'is_superuser', ] readonly_fields = [] exclude = ('otp_hash', 'otp_expiry', 'is_active', 'is_staff', 'password', 'last_login') import_form_class = ImportForm export_form_class = ExportForm fieldsets = ( - ('Personal info', {'fields': ('first_name', 'last_name', 'profile_photo', 'password'),}), - ('contact', {'fields': ('phone', 'email'),}), + ('اطلاعات شخصی', {'fields': ('first_name', 'last_name', 'profile_photo', 'password'),}), + ('اطلاعات ارتباطی', {'fields': ('phone', 'email'),}), ) - + empty_value_display = 'ثبت نشده' add_fieldsets = ( (None, { 'classes': ('wide',), @@ -52,7 +54,11 @@ class UserAdmin(BaseUserAdmin, ModelAdmin, ImportExportModelAdmin): "widget": ArrayWidget, } } + + def full_name_display(self, obj): + return obj.full_name + full_name_display.short_description = 'نام و نام خانوادگی' admin.site.unregister(Group) from django.contrib import admin @@ -66,7 +72,7 @@ admin.site.unregister(OutstandingToken) class AddressAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm - + list_display = ['user', 'name', 'address_display', 'postal_code', 'city', 'province', 'for_me'] compressed_fields = True warn_unsaved_form = True @@ -78,4 +84,7 @@ class AddressAdmin(ModelAdmin, ImportExportModelAdmin): ArrayField: { "widget": ArrayWidget, } - } \ No newline at end of file + } + def address_display(self, obj): + return obj.address[0:20] + address_display.short_description = 'ادرس' \ No newline at end of file diff --git a/backend/account/models.py b/backend/account/models.py index 994231d..74d4ad9 100644 --- a/backend/account/models.py +++ b/backend/account/models.py @@ -6,6 +6,8 @@ from datetime import datetime, timedelta from django.utils import timezone from rest_framework_simplejwt.token_blacklist.models import BlacklistedToken, OutstandingToken import hashlib +from django.contrib import admin + class UserManager(BaseUserManager): def create_user(self, phone, password=None): if not phone: @@ -37,8 +39,8 @@ class User(AbstractBaseUser, PermissionsMixin): first_name = models.CharField(max_length=50, blank=True, verbose_name='نام') last_name = models.CharField(max_length=50, blank=True, verbose_name='نام خانوادگی') profile_photo = models.ImageField(upload_to='profile_photos/', null=True, blank=True, verbose_name='عکس پروفایل') - is_active = models.BooleanField(default=True) - is_staff = models.BooleanField(default=False) + is_active = models.BooleanField(default=True, verbose_name='فعال بودن کاربر') + is_staff = models.BooleanField(default=False, verbose_name='کارمند') date_joined = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبتنام') otp_hash = models.CharField(max_length=64, null=True, blank=True, verbose_name='کد یک بار مصرف') otp_expiry = models.DateTimeField(null=True, blank=True, verbose_name='تاریخ تمام شدن کد یک بار مصرف') @@ -51,6 +53,12 @@ class User(AbstractBaseUser, PermissionsMixin): def groups(self): return None + @property + def full_name(self): + if self.first_name and self.last_name: + return f"{self.first_name} {self.last_name}" + return None + @property def user_permissions(self): return None @@ -105,13 +113,18 @@ class User(AbstractBaseUser, PermissionsMixin): class UserAddressModel(models.Model): - user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='address') - name = models.CharField(max_length=30) - address = models.TextField() - postal_code = models.CharField(max_length=10) - phone = models.CharField(max_length=11) - city = models.CharField(max_length=30) - province = models.CharField(max_length=30) - for_me = models.BooleanField(default=False) + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='address', verbose_name='کاربر') + name = models.CharField(max_length=30, verbose_name='نام ادرس') + address = models.TextField(verbose_name='ادرس کامل') + postal_code = models.CharField(max_length=10, verbose_name='کد پستی') + phone = models.CharField(max_length=11, verbose_name='شماره تماس برای ارسال', help_text='شماره تماس کاربر و شماره ی ارسالی میتواند متفاوت باشد') + city = models.CharField(max_length=30, verbose_name='شهر') + province = models.CharField(max_length=30, verbose_name='استان') + for_me = models.BooleanField(default=False, verbose_name='برای خود کاربر') + def __str__(self): - return f"{self.user.phone}, {self.name}" \ No newline at end of file + return f"{self.user.phone}, {self.name}" + + class Meta: + verbose_name = 'ادرس کاربر' + verbose_name_plural = 'ادرس های کاربر' \ No newline at end of file