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

Другие вопросы по тегам