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_idYou 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