Модель пользователя django и поле настраиваемого первичного ключа - PullRequest
9 голосов
/ 04 сентября 2010

Django по умолчанию создает поле первичного ключа для каждой модели с именем "id" с типом AutoField.На моих моделях я переопределяю это для использования пользовательского UUIDField в качестве первичного ключа с помощью атрибута "primary_key".Я также хотел бы, чтобы модель User в django.contrib.auth имела UUIDField в качестве первичного ключа, но это не представляется возможным без изменения исходного кода модели User.

IsЕсть ли рекомендуемый способ решения этой проблемы?

Ответы [ 2 ]

7 голосов
/ 04 сентября 2010

это кажется невозможным без изменения исходного кода модели пользователя.

Исправить.Если вы не готовы изменить (или заменить) User, то нет никакого способа.

Один (ненадежный, хакерский) способ сделать это - прикрепить UserProfile для каждого User экземпляра.,Каждый User должен иметь ровно один UserProfile.Затем вы можете добавить свой UUIDField в профиль.Вам все равно придется выполнять пользовательские запросы для перевода с UUIDField на id.

Если вам не нравится имя UserProfile, вы можете переименовать его соответствующим образом.Ключ в том, что у вас отношения один к одному с User.

6 голосов
/ 11 апреля 2013

С выпуском Django 1.5 серверная часть аутентификации теперь поддерживает пользовательские модели:

https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model

Поле электронной почты может использоваться в качестве поля имени пользователя, и для него может быть установлен аргумент primary_key :

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=254, unique=True, db_index=True, primary_key=True)

    USERNAME_FIELD = 'email'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...