django auth Урезанное пользователем поле электронной почты
У меня проблема с моделью пользователя django.contrib.auth, где максимальная длина электронной почты составляет 75.
Я получаю адреса электронной почты длиной более 75 символов от API Facebook, и мне нужно (очень хотелось бы) сохранить их в пользователе для обеспечения непрерывности среди пользователей из Facebook Connect и других.
Я могу решить проблему "Data truncated for column 'email' at row 1
"путем ручного редактирования поля в нашей базе данных mySql, но есть ли лучший способ решить эту проблему? предпочтительно тот, который не требует от меня ручного редактирования базы данных каждый раз, когда я сбрасываю ее для изменения схемы?
Я согласен с редактированием базы данных, если я могу добавить ее в скрипт сброса или файл initial_data.json.
2 ответа
EmailField длиной 75 символов жестко запрограммирован в Django. Вы можете исправить это так:
from django.db.models.fields import EmailField
def email_field_init(self, *args, **kwargs):
kwargs['max_length'] = kwargs.get('max_length', 200)
CharField.__init__(self, *args, **kwargs)
EmailField.__init__ = email_field_init
но это изменит ВСЕ длины полей EmailField, поэтому вы также можете попробовать:
from django.contrib.auth.models import User
from django.utils.translation import ugettext as _
from django.db import models
User.email = models.EmailField(_('e-mail address'), blank=True, max_length=200)
В обоих случаях лучше всего поместить этот код в init любого модуля ДО django.contrib.auth в вашем INSTALLED_APPS
Теперь есть билет для увеличения длины поля электронной почты в Django: http://code.djangoproject.com/ticket/11579