2009-05-27 12 views
9

Ho un problema con il modello User django.contrib.auth dove il max_length e-mail è 75.django Autenticazione dell'utente campo email

Sto ricevendo indirizzi di posta elettronica che sono più di 75 caratteri dalla API di Facebook, e Ho bisogno di (mi piacerebbe davvero) memorizzarli nell'utente per la continuità tra gli utenti che provengono da Facebook Connect e altri.

Sono in grado di risolvere il problema di "Data truncated for column 'email' at row 1" modificando manualmente il campo nel nostro database mySql, ma esiste un modo migliore per risolvere questo problema? preferibilmente uno che non implichi la modifica manuale del database ogni volta che lo reimpostato per una modifica dello schema?

Sono soddisfatto della modifica del database finché posso aggiungerlo allo script di ripristino o al file initial_data.json.

risposta

12

Email Campo di lunghezza di 75 caratteri è hardcoded in django. È possibile risolvere questo genere:

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 

ma questo cambierà TUTTO EmailField campi lunghezze, quindi si potrebbe anche provare:

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) 

entrambi i modi che sarebbe stato meglio mettere questo codice in init di qualsiasi modulo PRIMA django.contrib.auth nel vostro INSTALLED_APPS

+1

ahia ... che schifo :(perché fa Faceboo k mi dai questi giganteschi indirizzi email? – Jiaaro

+0

beh, un pò fa schifo, comunque hai altra scelta: scrivi il tuo modulo django.contrib.auth (che btw non è la cosa peggiore da fare se vedi più problemi come questo con buildin auth) – rombarcz