Django Admin: управление auth.models Пользователь из другой модели

Я хочу управлять атрибутом auth.models.User is_active из моей пользовательской модели UserProfile через страницу администратора.

class UserProfile(models.Model):

    user = models.OneToOneField(
        User,
        verbose_name=_('User'),
        related_name='user_profile',
        on_delete=models.CASCADE,
    )

    invited_by = models.ForeignKey(
        User,
        verbose_name=_('Invited by'),
        on_delete=models.SET_NULL,
        related_name='profile_invitations',
        null=True,
        blank=True,
    )

    avatar = ResizedImageField(
        size=[512, 512],
        crop=['middle', 'center'],
        quality=90,
        verbose_name='avatar',
        null=True,
        blank=True,
        upload_to=get_user_upload_path
    )

    attrs = models.CharField(
        _('User data'),
        max_length=10000,
    )

    phone_number = models.CharField(
        _('Phone number'),
        max_length=80,
        null=True,
        blank=True,
        validators=[phone_regex_validator],
    )

    def __str__(self):
        return '{}({})'.format(self.__class__.__name__, self.user.username)

    def save(self, **kwargs):
        if self.phone_number:
            self.phone_number = create_alphanumeric_string(self.phone_number)
        super().save(**kwargs)

    @property
    def attributes(self):
        return json.loads(self.attrs or '{}')

    @attributes.setter
    def attributes(self, value):
        self.attrs = json.dumps(value or {})

и в моем admin.py

@admin.register(UserProfile)
class UserProfileAdmin(admin.ModelAdmin):
    list_display = ('user', 'attrs', 'invited_by')
    search_fields = ('user__username',)

Я хочу добиться того, чтобы разрешить из админки UserProfile изменять поле is_active из auth.models.User. Мой вопрос в том, какой лучший способ решить эту проблему? Написать новую пользовательскую форму и прикрепить ее к представлению администратора или как-то прикрепить это поле к модели UserProfile? Или может быть другое решение?

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