Я работаю над приложением Django, которое будет содержать конфиденциальные данные пользователя, поэтому я предпринимаю ряд шагов для анонимизации объектов пользователя и их данных.
Я создал пользовательский объект «Пользователь», который подклассирует модель AbstractBaseUser следующим образом:
class User(AbstractBaseUser, PermissionsMixin):
(...)
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
(...)
Имеет следующий связанный ModelAdmin
объект:
from django.contrib.auth.forms import UserChangeForm
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
form = UserChangeForm
Я использую поля UUID для первичных ключей, чтобы обеспечить максимальную анонимность, но я хотел бы иметь возможность сбрасывать пароли пользователей в Django Admin (как вы можете сделать с объектом User
по умолчанию)
Однако, когда я открываю пользователя в админке и нажимаю ссылку для смены пароля, я получаю следующее сообщение об ошибке:
User with ID "21362aca-6918-47ea-9b29-275350a89c54/password" doesn't exist. Perhaps it was deleted?
Администратор URL все еще ожидает URL с целым числом в качестве значения pk
.
Так что мне кажется, что мне нужно переопределить конфигурацию URL-адреса администратора в определении ModelAdmin, но мне было интересно, есть ли более простой способ достичь желаемого результата - так как я представляю, что замена User.pk на поле UUID довольно обычное явление, и я представляю, что многие разработчики столкнулись с этой проблемой. Я пытался найти какие-то настройки / переключатели для достижения этой цели, но безрезультатно, я что-то упустил?