Thursday, July 6, 2017

django.db.utils.IntegrityError: NOT NULL constraint failed: core_profile.user_id

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from mysite.core.models import Profile



class SignUpForm(UserCreationForm):
email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'username', 'password1', 'password2',)

class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('birth_date','birth_place', 'adress', 'adress_complement',
'city', 'zip_code', 'drive_licence_num', 'social_secu_num', 'phone_number')from __future__ import unicode_literals

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
birth_date = models.DateField(null=True, blank=True)
birth_place = models.CharField(max_length=80, verbose_name= ("Lieu de Naissance"))
email_confirmed = models.BooleanField(default=False)
adress = models.CharField(max_length=80, verbose_name=("Adresse"))
adress_complement = models.CharField(max_length=80, verbose_name=("Complément d'Adresse"))
city = models.CharField(max_length=80, verbose_name=("Ville"))
zip_code = models.IntegerField(null=True, blank=True)
drive_licence_num = models.CharField(max_length=80, verbose_name=("N° du Permis de conduire"))
social_secu_num = models.IntegerField(null=True, blank=True)
phone_number = models.IntegerField(null=True, blank=True)


@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.contrib.sites.shortcuts import get_current_site
from django.shortcuts import render, redirect
from django.utils.encoding import force_bytes, force_text
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.template.loader import render_to_string

from mysite.core.forms import SignUpForm, ProfileForm
from mysite.core.models import Profile
from mysite.core.tokens import account_activation_token

def index(request):
return render(request, 'index.html')

@login_required
def home(request):
return render(request, 'home.html')


def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False
user.save()

current_site = get_current_site(request)
subject = 'Activate Your MySite Account'
message = render_to_string('account_activation_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
user.email_user(subject, message)

return redirect('account_activation_sent')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})


def account_activation_sent(request):
return render(request, 'account_activation_sent.html')


def activate(request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None

if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.profile.email_confirmed = True
user.save()
login(request, user)
return redirect('home')
else:
return render(request, 'account_activation_invalid.html')


def complete_profile(request):
#if email_confirmed == True:
if request.user.is_authenticated():
if request.method == 'POST':

form = ProfileForm(request.POST)
if form.is_valid():
form.save()
return render(request, 'home.html')
else:
form = ProfileForm()
return render(request, 'complete_profile.html', {'form': form})
else:
return render(request, 'login.html')
i'm trying to build a customised registration to my site, so i'm using a sign Up with Profile Model that inherits from django User class with "OneToOneField" relation .
i'm having this ERROR after submit a form that i made to let user complete profile information just after SignUp's email confirmation. Look at this diagram :

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Python36\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
    response = get_response(request)
  File "C:\Python36\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Python36\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\admin\Desktop\dev1\mysite\mysite\core\views.py", line 74, in complete_profile
    form.save()
  File "C:\Python36\lib\site-packages\django\forms\models.py", line 451, in save
    self.instance.save()
  File "C:\Python36\lib\site-packages\django\db\models\base.py", line 806, in save
    force_update=force_update, update_fields=update_fields)
  File "C:\Python36\lib\site-packages\django\db\models\base.py", line 836, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "C:\Python36\lib\site-packages\django\db\models\base.py", line 922, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "C:\Python36\lib\site-packages\django\db\models\base.py", line 961, in _do_insert
    using=using, raw=raw)
  File "C:\Python36\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Python36\lib\site-packages\django\db\models\query.py", line 1060, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "C:\Python36\lib\site-packages\django\db\models\sql\compiler.py", line 1099, in execute_sql
    cursor.execute(sql, params)
  File "C:\Python36\lib\site-packages\django\db\backends\utils.py", line 80, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "C:\Python36\lib\site-packages\django\db\backends\utils.py", line 65, in execute
    return self.cursor.execute(sql, params)
  File "C:\Python36\lib\site-packages\django\db\utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "C:\Python36\lib\site-packages\django\utils\six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "C:\Python36\lib\site-packages\django\db\backends\utils.py", line 65, in execute
    return self.cursor.execute(sql, params)
  File "C:\Python36\lib\site-packages\django\db\backends\sqlite3\base.py", line 328, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: NOT NULL constraint failed: core_profile.user_id


--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/2614a4b3-9f06-419c-89ae-066927df8abd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment