2016-03-27 5 views
1

Я хочу добавить maxlength длиной 255 символов для поля имени пользователя в модели пользователя django. Я также хотел бы увеличить максимальную длину полей first_name и last_name. Я просмотрел много сообщений, которые видели monkeypatching как вариант, но я не могу это понять. Мне было интересно, можно ли написать собственный файл миграции и каким-то образом применить его. Возможно ли, и если да, то некоторые рекомендации о том, как достичь этого, были бы замечательными.Django, изменить имя поля пользователя модели пользователя

Примечание: может показаться, что это дубликат, но множество сообщений, которые я нашел на SO, касаются добавления нового поля, которое может быть достигнуто с помощью User.add_to_class(). Я намерен изменить maxlength.

+0

Вы должны изучить [пользовательскую модель пользователя] (https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#specifying-a-custom-user-model) - как делать то, что вы предлагаете, будет ломаться при обновлении django. –

+0

@BurhanKhalid то, что я прошел через проект, и теперь клиент хочет поддерживать более крупные поля имени пользователя и имени. Поэтому я не рассматриваю вариант, который заставит меня пройти через множество изменений. Я предполагаю, что если я использую пользовательскую модель пользователя, мне тоже нужно будет внести необходимые изменения в код? –

ответ

1

Это «большое» изменение, требуемое для вашего проекта Django, и, вероятно, что-то, что должно было быть сделано в начале, а не в конце. Поскольку кто-то из опытных миграций нарушает модели User на производственных системах, я согласен с @Burhan Khalid - оставьте модель contrib.auth.models.User такой, какой она есть.

Сначала давайте посмотрим на предупреждения в документации, от Substituting a custom User model:

Изменение этого параметра после того, как у вас есть таблицы, созданные не поддерживается от makemigrations и приведет вас, чтобы вручную исправить схему, переносите данные из старой таблицы пользователя и, возможно, вручную повторно применяйте некоторые миграции.

Я понимаю, что вы хотите «просто увеличить» длину этих полей, но это не тривиальное изменение, а одно из того, что «предназначено» для миграции. «Django-way» для решения этой проблемы заключается в добавлении пользовательской модели, отвечающей новым требованиям. К сожалению, это означает, что вам придется обрабатывать миграцию вручную, если у вас есть существующие данные пользователя на производственном сервере. Стандартные инструкции на Customizing authentication in Django помогут вам.

преимущества вы получите, который, мы надеемся, будет окупаться тяжелую работу, являются:

  • Код проекта защищен от каких-либо обновлений. Пользовательская модель по умолчанию не будет иметь никаких настроек.
  • Код проекта будет соответствовать «Django-way», что упростит работу других разработчиков и членов команды в будущем.

Я понимаю, что это, вероятно, не то, что вы хотите услышать, но я надеюсь, что это поможет.

+0

Спасибо за понимание. Думаю, я буду использовать пользовательскую модель после прочтения! –

Смежные вопросы