account verbose name full name property and account admin displays

This commit is contained in:
Parsa Nazer
2025-02-04 21:00:17 +03:30
parent 993e1e079b
commit 5af162d686
2 changed files with 40 additions and 18 deletions
+16 -7
View File
@@ -14,6 +14,8 @@ class UserAddressInLine(TabularInline):
model = UserAddressModel model = UserAddressModel
extra = 0 extra = 0
tab = True tab = True
verbose_name = 'ادرس کاربر'
verbose_name_plural = 'ادرس های کاربر'
@admin.register(User) @admin.register(User)
class UserAdmin(BaseUserAdmin, ModelAdmin, ImportExportModelAdmin): class UserAdmin(BaseUserAdmin, ModelAdmin, ImportExportModelAdmin):
@@ -24,18 +26,18 @@ class UserAdmin(BaseUserAdmin, ModelAdmin, ImportExportModelAdmin):
ordering = [] ordering = []
inlines = [UserAddressInLine] inlines = [UserAddressInLine]
list_filter = [] list_filter = []
search_fields = ['phone', 'first_name', 'last_name', ] search_fields = ['phone', 'first_name', 'last_name', 'full_name', 'email']
list_display = ['phone', 'email', 'is_superuser'] list_display = ['full_name_display', 'phone', 'email', 'is_superuser', ]
readonly_fields = [] readonly_fields = []
exclude = ('otp_hash', 'otp_expiry', 'is_active', 'is_staff', 'password', 'last_login') exclude = ('otp_hash', 'otp_expiry', 'is_active', 'is_staff', 'password', 'last_login')
import_form_class = ImportForm import_form_class = ImportForm
export_form_class = ExportForm export_form_class = ExportForm
fieldsets = ( fieldsets = (
('Personal info', {'fields': ('first_name', 'last_name', 'profile_photo', 'password'),}), ('اطلاعات شخصی', {'fields': ('first_name', 'last_name', 'profile_photo', 'password'),}),
('contact', {'fields': ('phone', 'email'),}), ('اطلاعات ارتباطی', {'fields': ('phone', 'email'),}),
) )
empty_value_display = 'ثبت نشده'
add_fieldsets = ( add_fieldsets = (
(None, { (None, {
'classes': ('wide',), 'classes': ('wide',),
@@ -52,7 +54,11 @@ class UserAdmin(BaseUserAdmin, ModelAdmin, ImportExportModelAdmin):
"widget": ArrayWidget, "widget": ArrayWidget,
} }
} }
def full_name_display(self, obj):
return obj.full_name
full_name_display.short_description = 'نام و نام خانوادگی'
admin.site.unregister(Group) admin.site.unregister(Group)
from django.contrib import admin from django.contrib import admin
@@ -66,7 +72,7 @@ admin.site.unregister(OutstandingToken)
class AddressAdmin(ModelAdmin, ImportExportModelAdmin): class AddressAdmin(ModelAdmin, ImportExportModelAdmin):
import_form_class = ImportForm import_form_class = ImportForm
export_form_class = ExportForm export_form_class = ExportForm
list_display = ['user', 'name', 'address_display', 'postal_code', 'city', 'province', 'for_me']
compressed_fields = True compressed_fields = True
warn_unsaved_form = True warn_unsaved_form = True
@@ -78,4 +84,7 @@ class AddressAdmin(ModelAdmin, ImportExportModelAdmin):
ArrayField: { ArrayField: {
"widget": ArrayWidget, "widget": ArrayWidget,
} }
} }
def address_display(self, obj):
return obj.address[0:20]
address_display.short_description = 'ادرس'
+24 -11
View File
@@ -6,6 +6,8 @@ from datetime import datetime, timedelta
from django.utils import timezone from django.utils import timezone
from rest_framework_simplejwt.token_blacklist.models import BlacklistedToken, OutstandingToken from rest_framework_simplejwt.token_blacklist.models import BlacklistedToken, OutstandingToken
import hashlib import hashlib
from django.contrib import admin
class UserManager(BaseUserManager): class UserManager(BaseUserManager):
def create_user(self, phone, password=None): def create_user(self, phone, password=None):
if not phone: if not phone:
@@ -37,8 +39,8 @@ class User(AbstractBaseUser, PermissionsMixin):
first_name = models.CharField(max_length=50, blank=True, verbose_name='نام') first_name = models.CharField(max_length=50, blank=True, verbose_name='نام')
last_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='عکس پروفایل') profile_photo = models.ImageField(upload_to='profile_photos/', null=True, blank=True, verbose_name='عکس پروفایل')
is_active = models.BooleanField(default=True) is_active = models.BooleanField(default=True, verbose_name='فعال بودن کاربر')
is_staff = models.BooleanField(default=False) is_staff = models.BooleanField(default=False, verbose_name='کارمند')
date_joined = models.DateTimeField(auto_now_add=True, 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_hash = models.CharField(max_length=64, null=True, blank=True, verbose_name='کد یک بار مصرف')
otp_expiry = models.DateTimeField(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): def groups(self):
return None 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 @property
def user_permissions(self): def user_permissions(self):
return None return None
@@ -105,13 +113,18 @@ class User(AbstractBaseUser, PermissionsMixin):
class UserAddressModel(models.Model): class UserAddressModel(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='address') user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='address', verbose_name='کاربر')
name = models.CharField(max_length=30) name = models.CharField(max_length=30, verbose_name='نام ادرس')
address = models.TextField() address = models.TextField(verbose_name='ادرس کامل')
postal_code = models.CharField(max_length=10) postal_code = models.CharField(max_length=10, verbose_name='کد پستی')
phone = models.CharField(max_length=11) phone = models.CharField(max_length=11, verbose_name='شماره تماس برای ارسال', help_text='شماره تماس کاربر و شماره ی ارسالی میتواند متفاوت باشد')
city = models.CharField(max_length=30) city = models.CharField(max_length=30, verbose_name='شهر')
province = models.CharField(max_length=30) province = models.CharField(max_length=30, verbose_name='استان')
for_me = models.BooleanField(default=False) for_me = models.BooleanField(default=False, verbose_name='برای خود کاربر')
def __str__(self): def __str__(self):
return f"{self.user.phone}, {self.name}" return f"{self.user.phone}, {self.name}"
class Meta:
verbose_name = 'ادرس کاربر'
verbose_name_plural = 'ادرس های کاربر'