I had created a custom registration form through which I am creating User and I want to create a profile of the user while creating a User. The code is working if I create a profile manually through admin but not creating while creating user. below is my code. please help me out. Models.py
from distutils.command.upload import upload
from email.policy import default
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.models import User
from PIL import Image
# Create your models here.
class User(AbstractUser):
is_user = models.BooleanField(default=False)
is_doctor = models.BooleanField( default=False)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
class User_reg(models.Model):
user = models.OneToOneField('User',on_delete=models.CASCADE, primary_key=True)
fname = models.CharField(max_length=50,blank=False)
lname = models.CharField(max_length=50,blank=False)
email = models.EmailField(max_length=100,blank=False)
address = models.TextField(max_length=500,blank=False)
gender = models.CharField(max_length=7, blank=False)
phone = models.CharField(max_length=12,unique=True,blank=False)
Username = models.CharField(max_length=100,blank=False,unique=True)
Userpassword = models.CharField(max_length=100,blank=False)
def __str__(self):
return self.fname
class dr_reg(models.Model):
user = models.OneToOneField('User',on_delete=models.CASCADE, primary_key=True)
fname = models.CharField(max_length=50,blank=False)
lname = models.CharField(max_length=50,blank=False)
image = models.ImageField(upload_to="image")
specialisation = models.CharField(max_length=100,blank=False)
qualificaton = models.CharField(max_length=100,blank=False)
phone = models.CharField(max_length=12,blank=False,unique=True)
gender = models.CharField(max_length=7,blank=False)
address = models.TextField(max_length=500,blank=False)
state = models.CharField(max_length=50,blank=False)
city = models.CharField(max_length=50,blank=False)
zip = models.CharField(max_length=50,blank=False)
email = models.EmailField(max_length=50,blank=False)
dUsername = models.CharField(max_length=100,blank=False,unique=True)
dPassword = models.CharField(max_length=100,blank=False)
def __str__(self):
return self.fname
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(default='#', upload_to='profile_images')
bio = models.TextField()
def __str__(self):
return self.bio
def save(self, *args, **kwargs):
super().save()
img = Image.open(self.avatar.path)
if img.height > 100 or img.width > 100:
new_img = (100, 100)
img.thumbnail(new_img)
img.save(self.avatar.path)
views.py
def dr_register(request):
if request.method == "POST":
fname = request.POST.get('dfname')
lname = request.POST.get('dlname')
image = request.POST.get('img')
qualification = request.POST.get('qualification')
specialist = request.POST.get('specialisation')
phone = request.POST.get('dphone')
gender = request.POST.get('dsex')
address = request.POST.get('dadd')
state = request.POST.get('state')
city = request.POST.get('city')
zip = request.POST.get('zip')
email = request.POST.get('demail')
dr_username = request.POST.get('duname')
dr_password = request.POST.get('dpass')
mydoctor = User.objects.create_user(dr_username, email, dr_password)
mydoctor.first_name = fname
mydoctor.last_name = lname
mydoctor.is_doctor = True
mydoctor.save()
dr_reg.objects.create(fname=fname,lname=lname,image=image, qualificaton=qualification, specialisation = specialist, phone= phone, gender=gender, address=address, state=state, city=city, zip=zip, email=email, dUsername=dr_username, dPassword= dr_password,user=mydoctor)
# dr_register.save()
messages.success(request, 'Registeration successful')
return render(request, 'user/login.html')
else:
return render(request, 'doctor/register.html')
@login_required
def profile(request):
if request.method == 'POST':
user_form = UpdateUserForm(request.POST, instance=request.user)
profile_form = UpdateProfileForm(request.POST, request.FILES, instance=request.user.profile)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
messages.success(request, 'Your profile is updated successfully')
return redirect(to='users-profile')
else:
user_form = UpdateUserForm(instance=request.user)
profile_form = UpdateProfileForm(instance=request.user.profile)
context = {
'user_form': user_form,
'profile_form': profile_form
}
return render(request, 'user/edit-profile.html', context)
signals.py
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).save()
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
apps.py
from django.apps import AppConfig
class LoginModuleConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'authenticate_me'
def ready(self):
import authenticate_me.signals
the last line import authenticate_me.signals
is displaying in grey color.saying unused import and is not accessed.