2012-03-13 1 views
1
from django.contrib.auth.models import User 

a = User.objects.create_user("1","2","3") 
b = User.objects.create_user("1","2","3") 

aucune erreur encore ...Pourquoi la méthode create_user de django ne valide-t-elle pas l'unicité?

a.validate_unique() 
ValidationError: {'username': [u'User with this Username already exists.']} 

je me attends à recevoir l'erreur de validation lorsque b est en cours d'enregistrement dans le cadre de create_user.

En regardant le Django Model Instance Reference, la section «que se passe-t-il lorsque vous enregistrez» ne décrit pas la sauvegarde à tout moment.

Est-ce une décision de conception intentionnelle ou un effet secondaire dû à l'utilisation de django-nonrel? J'aurais attendu une base de données relationnelle pour retourner une IntegrityError ou quelque chose de similaire.

Répondre

3

Vous utilisez peut-être SQLite, qui ne prend pas en charge les contraintes de clé uniques.

create_user suppose que vous avez effectué toutes les vérifications nécessaires, généralement dans les fonctions de validation d'un formulaire. Ca te donne assez de corde pour te pendre avec.

+0

Merci! J'utilise Django-nonrel (avec Mongo), mais je m'attendrais à ce que Mongo soit assez bon pour suivre les contraintes d'unicité. Ma solution a fini par créer ma propre fonction create_user qui a fait la validation avant de soumettre; Est-ce que cela semble raisonnable? (Je n'utilise pas de formulaires pour créer son utilisateur). – AlexeyMK

+0

C'est à peu près la façon normale de faire les choses. Les contraintes de base de données sont vraiment une dernière ligne de défense, et ne vous en disent pas beaucoup quand elles se déclenchent, il est donc préférable de valider complètement les entrées avant de vous engager dans la base de données. –

Questions connexes