2009-05-27 14 views
9

tengo un problema con el modelo del usuario django.contrib.auth donde el correo electrónico es max_length 75.Django Autenticación de usuario truncar campo de correo electrónico

estoy recibiendo direcciones de correo electrónico que son más de 75 personajes de la API de Facebook, y Necesito (me gustaría) almacenarlos en el usuario para la continuidad entre los usuarios que son de Facebook Connect y otros.

Puedo resolver el problema de "Data truncated for column 'email' at row 1" editando manualmente el campo en nuestra base de datos mySql, pero ¿hay una mejor manera de solucionar esto? preferiblemente uno que no implica que edite manualmente la base de datos cada vez que lo reinicio para un cambio de esquema?

Estoy de acuerdo con la edición de la base de datos, siempre y cuando pueda agregarla al script de reinicio, o al archivo initial_data.json.

Respuesta

12

EmailField 75 caracteres de longitud está codificada en django. Puedes solucionar este problema así:

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 

pero esto va a cambiar todos los campos EmailField longitudes, por lo que también podría intentar:

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) 

en ambos sentidos que sería mejor para poner este código en init de cualquier módulo ANTES django.contrib.auth en su INSTALLED_APPS

+1

ick ... que succiona :(¿por qué faceboo k darme estas direcciones de correo electrónico gigantescas? – Jiaaro

+0

bueno, un poco apesta, de todos modos tienes otra opción: escribe tu propio módulo django.contrib.auth (que por cierto no es lo peor que puedes hacer si ves más problemas como este con buildin auth) – rombarcz

Cuestiones relacionadas