Reputation: 63
I'm trying to create a profile for a user in django using signals when the user profile is created I need to create a profile automatically.
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
picture = models.ImageField(default='default.png',upload_to='profile_pics')
bio = models.CharField(max_length=200,blank=True)
def __str__(self):
return self.user.username
this is in the signals.py file:
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile
@receiver(post_save, sender=User)
def create_profile(sender,instance,created,**kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def create_profile(sender,instance,created,**kwargs):
instance.profile.save()
and here is the register view:
def registerUserView(request):
""" this is for registring a new user"""
if request.method == "POST":
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request,f'your account has been created successfully! you are able to login')
return redirect("login")
else:
form = UserRegisterForm()
return render(request,"users/register.html",{"form":form})
now I don't know the error that has been occured this time. django version 2.2 and python 3.8.
Upvotes: 0
Views: 46
Reputation: 640
Inside your signals.py
# make required imports
@receiver(post_save, sender=User)
def create_profile(sender,instance,created,**kwargs):
if created:
profile_obj = Profile.objects.create(user=instance)
profile_obj.save()
# not sure but check if below line need to be uncommentd
# instance.profile.save()
'''
delete another signal both are invokes at same time also second
one is making infinite recursion
(user save -> save profile -> user save -> save profile ...)
'''
Upvotes: 1