我剛開始學習Django。雖然我試圖創建一個非常簡單的用戶註冊功能(使用PSQL),但我總是得到這樣的消息:IntegrityError:「email」列中的空值違反非空約束
完整性錯誤:列「email」中的空值違反非空約束 我認爲有東西我的數據庫錯了。但我不明白爲什麼..
我使用Django 1.5.1和PSQL 9.1.9 非常感謝你!
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})
回溯:
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
檢查我的分貝,我看到有一個名爲porfolioSite_user表,但當我放棄它時,psql告訴我桌子不會退出......所以很困惑......
看起來像Django希望能夠爲未設置的電子郵件存儲'null',但是您的數據庫表是在'email'列上使用'not null'約束創建的。 –
在你的'registerForm'中,確保電子郵件字段是必需的。 –