2011-01-28 1 views
7

Avant que quelqu'un marque cette question comme un doublon de cette question Can django's auth_user.username be varchar(75)? How could that be done? ou d'autres questions sur SO, s'il vous plaît lire cette question. La question à laquelle je suis lié pose cette question avec précision mais malheureusement les réponses ne répondent pas à la question posée.Puis-je remplacer le champ auth_user.username de Django par 100 caractères sans rien casser?

Puis-je modifier le champ auth_user.username être 100 caractères en procédant comme suit:

  1. Exécuter tableau ALTER DB pour le champ Nom d'utilisateur
  2. Modifier le max_length ici: username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))

Est-ce que ça casserait quelque chose dans Django si je devais le faire?

Que cela se casse lorsque je mets Django à jour vers une version supérieure n'est pas un problème. Je ne cherche pas non plus à écrire d'autres méthodes d'authentification. Je veux juste savoir si je casserais n'importe quoi si je devais faire ceci.

+0

http: // stackoverflow.com/questions/2610088/can-djangos-auth-utilisateur-nom d'utilisateur-be-varchar75-comment-pourrait-ce-être-fait –

+0

@tolomea OP a déjà posté ce lien et le lire. – Medorator

Répondre

20

Vous avez besoin d'une longueur maximale de patch de singe à plusieurs endroits: description du champ de modèle, description du champ de formulaire et validateurs de longueur maximale. Les validateurs de longueur maximale sont attachés aux champs de formulaire et aux champs de modèle.

Voici un extrait de code, qui patcher tout:

https://gist.github.com/1143957 (testé avec django 1.2 et 1.3)

Mise à jour: Bonnes nouvelles! Depuis django 1.5, vous pouvez remplacer le modèle utilisateur: Customizing the User model

+0

+1 Nice one. L'autre article explique ce processus mais pas ** comment ** vous devrez remplacer la validation par défaut des formulaires django. –

+0

Cool merci. Laisse-moi essayer ça. –

+3

En outre, j'ai ajouté 3 lignes pour permettre aux utilisateurs enregistrer avec 75 caractères: de django.contrib.auth.models importent utilisateur User._meta.get_field_by_name ('nom d'utilisateur') [0] = .max_length 75 User._meta.get_field ('nom d'utilisateur'). validators [0] .limit_value = 75 – Thomas

0

Si vous modifiez la base de données manuellement ainsi que le modèle en conséquence, il ne devrait pas y avoir de problème.

Vous pouvez également revenir autrement, et je dirais que faire une sauvegarde au cas où mais je ne suis pas sûr que ce même nécessaire

+0

Juste curieux. Avez-vous essayé cela avant vous? –

1

Il n'y a pas de mal à le faire. Il vous suffit de modifier la longueur dans le modèle et dans la base de données :)

1

Créez un modèle de profil utilisateur, ajoutez-y votre champ de nom d'utilisateur très long et utilisez-le. Bien sûr, cela rend le champ de nom d'utilisateur authentique inutile, mais c'est beaucoup mieux que de pirater le code Django, ce qui vous donnera des ennuis quand vous avez besoin de le mettre à jour.

+0

Merci, mais ce n'est pas ce que je cherche. :) –

0

Une autre solution est de changer votre code d'authentification. Lorsqu'un nouvel utilisateur s'inscrit, il saisit un e-mail, vous l'enregistrez dans le champ e-mail afin que vous l'ayez et si son e-mail est> 30 caractères, vous le raccourcissez avant de le placer dans le champ utilisateur. Ensuite, modifiez votre authentification de connexion pour les nouvelles connexions.

1

Pour moi, le code ci-dessous fonctionne et est bien simple.

from django.contrib.auth.models import AbstractUser 

class MyUser(AbstractUser): 
    .... 
    # your custom fields 

MyUser._meta.get_field('username').max_length = 255 # or 100 

après que vous pouvez exécuter votre migration

+0

Celui-ci devrait être la réponse acceptée pour django> = 1.7 – Dunkelstern

Questions connexes