django auth Урезанное пользователем поле электронной почты - PullRequest
9 голосов
/ 27 мая 2009

У меня проблема с моделью пользователя django.contrib.auth, где максимальная длина электронной почты составляет 75.

Я получаю адреса электронной почты, длина которых превышает 75 символов, из API Facebook, и мне нужно (очень хотелось бы) сохранить их в пользователе для обеспечения непрерывности среди пользователей из Facebook Connect и других.

Я могу решить проблему "Data truncated for column 'email' at row 1", отредактировав поле в нашей базе данных mySql вручную, но есть ли лучший способ решить эту проблему? предпочтительно тот, который делает не требуется ли мне вручную редактировать базу данных каждый раз, когда я сбрасываю ее для изменения схемы?

Я согласен с редактированием базы данных, если я могу добавить ее в сценарий сброса или файл initial_data.json.

Ответы [ 2 ]

12 голосов
/ 27 мая 2009

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 1.5 вы можете использовать свою собственную пользовательскую модель, основанную на модели AbstractUser, поэтому вы можете использовать свои собственные поля и длины. В ваших моделях:

from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    email = models.EmailField(_('e-mail address'), blank=True, max_length=200)

В настройках:

AUTH_USER_MODEL = 'your_app.models.User'
2 голосов
/ 28 июля 2009

Теперь есть билет для увеличения длины поля электронной почты в Django: http://code.djangoproject.com/ticket/11579

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