Как создать страницу администратора для утверждения учетной записи в Django
Я пытаюсь создать страницу администратора в Django для утверждения учетных записей пользователей. Вот конкретные требования:
Предыстория
- У меня есть система регистрации арендодателей. Каждый арендодатель должен предоставить личную информацию и подробности о своей арендуемой недвижимости при регистрации.
- Учетные записи арендодателей по умолчанию неактивны. Администраторам необходимо ознакомиться с информацией о собственности перед активацией учетной записи.
Основные модели
# User model
class User(AbstractUser):
user_type = models.CharField(max_length=10, choices=UserType, default=UserType.TENANT)
phone_number = models.CharField(max_length=10, unique=True, blank=True, null=True)
# Other fields...
# Property model
class Property(models.Model):
owner = models.ForeignKey("accounts.User", on_delete=models.CASCADE, related_name="properties")
name = models.CharField(max_length=256)
status = models.CharField(max_length=10, choices=PropertyStatus.choices, default=PropertyStatus.PENDING)
# Other fields...
Вопрос
Я хочу создать страницу администратора Django, которая:
- Отображает список неутвержденных учетных записей арендодателей
- При нажатии на учетную запись отображается подробная информация о пользователях и их зарегистрированной собственности
- Имеет возможность одобрить или отклонить учетную запись (если свойство будет одобрено, учетная запись будет активирована)
Я думал об использовании пользовательского ModelAdmin
с readonly_fields
для отображения подробной информации, но я не совсем понимаю, как лучше всего:
- Отображение информации из нескольких моделей (пользователя и объекта недвижимости) на одной странице администратора
- Добавление действий для утверждения/отклонения учетных записей
Каков наилучший способ реализовать это? Примеры кода были бы очень полезны. Спасибо!
Что я пробовал
class PendingLandlordAdmin(admin.ModelAdmin):
list_display = ['username', 'email', 'property_name']
readonly_fields = ['username', 'email', 'property_details']
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.filter(user_type='LANDLORD', is_active=False)
# Not sure how to implement property_details and actions...
admin.site.register(User, UserAdmin)
admin.site.register(User, PendingLandlordAdmin) # Doesn't work
Подход, который я пробовал, не работает, потому что я не могу зарегистрировать 2 страницы администратора для 1 модели
Чтобы создать систему подтверждения учетных записей арендодателей в Django admin:
class PropertyInline(admin.TabularInline):
model = Property
readonly_fields = ['name', 'status']
extra = 0
can_delete = False
class UserAdmin(BaseUserAdmin):
list_display = ('username', 'email', 'is_active')
list_filter = ('user_type', 'is_active')
inlines = [PropertyInline]
actions = ['approve_landlords']
def get_queryset(self, request):
return super().get_queryset(request).filter(user_type='LANDLORD')
def approve_landlords(self, request, queryset):
for user in queryset:
user.is_active = True
user.save()
user.properties.update(status='APPROVED')
self.message_user(request, "Landlords approved.")
admin.site.register(User, UserAdmin)
Здесь отображается информация о арендодателе, недвижимость в очереди и администраторы могут утверждать учетные записи с помощью действия.