Как создать страницу администратора для утверждения учетной записи в 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, которая:

  1. Отображает список неутвержденных учетных записей арендодателей
  2. При нажатии на учетную запись отображается подробная информация о пользователях и их зарегистрированной собственности
  3. Имеет возможность одобрить или отклонить учетную запись (если свойство будет одобрено, учетная запись будет активирована)

Я думал об использовании пользовательского 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)

Здесь отображается информация о арендодателе, недвижимость в очереди и администраторы могут утверждать учетные записи с помощью действия.

Вернуться на верх