IntegrityError: valeur null dans la colonne “email” viole non-nulle contrainte
Je viens de commencer à apprendre Django. Alors que je suis en train de créer un utilisateur très simple fonction registre(avec PSQL),mais j'ai toujours eu ce message:
Erreur d'intégrité: valeur null dans la colonne "email" viole non-nulle contrainte
Je pense qu'il ya quelque chose de mal avec ma base de données. Mais je ne pouvais pas comprendre pourquoi..
Je suis en utilisant Django 1.5.1 et PSQL 9.1.9
MERCI BEAUCOUP!!
models.py:
from django.db import models
class User(models.Model):
name = models.CharField(max_length=30)
email = models.EmailField(verbose_name='e-mail')
password = models.CharField(max_length=16)
views.py:
from portfolioSite.forms import register_form
from django.shortcuts import render
from django.http import HttpResponseRedirect
from portfolioSite.models import User
def register(request):
if request.method == 'POST':
registerForm = register_form(request.POST)
if registerForm.is_valid():
User.objects.create(name = registerForm.cleaned_data['name'],
email = registerForm.cleaned_data['email'],
password = registerForm.cleaned_data['password2'])
return HttpResponseRedirect('/success/')
else:
registerForm = register_form()
return render(request, 'register_form.html', {'form':registerForm})
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
115. response = callback(request, *callback_args, **callback_kwargs)
File "/home/guangyi/Django/projects/mysite/portfolioSite/views.py" in register
13. password = registerForm.cleaned_data['password2']
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py" in create
149. return self.get_query_set().create(**kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in create
402. obj.save(force_insert=True, using=self.db)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save
546. force_update=force_update, update_fields=update_fields)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save_base
650. result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py" in _insert
215. return insert_query(self.model, objs, fields, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in insert_query
1661. return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py" in execute_sql
937. cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py" in execute
41. return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py" in execute
56. six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py" in execute
54. return self.cursor.execute(query, args)
Exception Type: IntegrityError at /register/
Exception Value: null value in column "email" violates not-null constraint
- Je vérifier ma db, j'ai vu qu'il y est une table appelée porfolioSite_user, mais quand je le laisse tomber, psql m'a dit que le tableau n'est pas la sortie...si confus....
- Ressemble à Django s'attend à être en mesure de stocker
null
pour unset e-mails, mais votre table de base de données a été créée avec unnot null
contrainte sur laemail
colonne. - Dans votre
registerForm
, assurez-vous que le champ e-mail est nécessaire.
Vous devez vous connecter pour publier un commentaire.
Vérifier votre modèle assurez-vous que le champ e-mail dans votre formulaire de soumission de l' '
email
' entrée correctement. Si c'est la soumission de rien sous "email
" lorsque vous cliquez sur envoyer, c'est probablement à l'origine de votre problème.Il y a un certain nombre de enregistrement apps que vous pouvez installer qui permettra de se débarrasser des problèmes que vous rencontrez avec le présent. Je recommande
django-registration-1.5
depuis que vous utilisez une version de la version de django avec l'utilisateur personnalisable modèles. Ce serait la solution la plus simple, mais dans le cas où vous êtes en train de faire ce pour auto-enrichissement, il Y a un certain nombre d'autres choses que vous pouvez essayer si l'écran semble ok. Vous pouvez vérifier votre sud migrations", assurez-vous qu'ils sont tous à jour, ou si vous êtes dans les phases de test et de votre base de données n'a pas d'importance, vous pouvez vider la base de données pour voir si elle se débarrasser de l'erreur.modèle de champs ont deux options, mais faire des choses différentes. Ils sont " les
null=True
valeur et la 'blank=True
' un. Vous avez seulement 'blank=True
", qui est le validateur pour le python côté de la création de l'objet. Toutefois, lorsque vous essayez d'enregistrer dans la base de données, vous recevrez un message d'erreur, et c'est ce qui est le plus probable qui se passe ici. Depuis votre "email
modèle est absent de la de la "null=True
'option, vous obtenez un message d'erreur parce que vous êtes à la soumission d'une'null
valeur non-nulle contrainte. Cependant, l'ajout d' 'null=True
" pour votre modèle n'est pas la bonne chose à faire dans cette situation.si vous voulez vous épargner les maux de tête, je suggère de brancher
django-registration-1.5
dans votre projet et de laisser l'application faire l'enregistrement pour vous.Essayez de vérifier le champ e-mail avant d'envoyer une requête POST, assurez-vous que le champ e-mail n'est pas NULL avant de vous envoyer la demande.
Par défaut, tous les champs dans un django modèle et n'accepte pas les valeurs null. Pour un champ pour accepter les valeurs null, vous devez ajouter
null=True
pour le modèle de définition de champ.Le problème dans votre cas, c'est que le formulaire ne permet pas de valider qu'un email est requis; il en est d'accepter les blancs dans le champ e-mail.
Un autre problème est que vous êtes en utilisant un modèle appelé
User
lorsque django est livré avec une authentification complète du système avec les utilisateurs, des autorisations et oui, même l'inscription et le mot de passe oublié formes (voir les détails dans la la documentation). Cette application fournit unUser
de ce modèle.Enfin, django ne fait jamais de destructrice des changements à votre base de données. Cela signifie que si vous supprimez un modèle, ou de supprimer ajouter une colonne à un modèle de la
syncdb
commande ne sera pas faire ces changements. Vous devrez supprimer la base de données, puis exécutezsyncdb
de nouveau. Plus tard, vous pouvez en apprendre davantage sur des applications commeSud
qui aident à garder la trace de ces changements et de faire les modifications de base de données pour vous.