RelatedObjectDoesNotExist в /auth/profile/ У пользователя нет профиля. (пользователь создан, а профиль нет)
Я создал пользовательскую форму регистрации, через которую я создаю пользователя, и я хочу создать профиль пользователя при создании пользователя. Код работает, если я создаю профиль вручную через администратора, но не создается при создании пользователя. ниже приведен мой код. пожалуйста, помогите мне. 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
последняя строка import authenticate_me.signals
отображается серым цветом, говоря, что импорт не используется и не доступен.
если сигналы не подаются, это означает, что вы не предоставили правильные AppConfig
в django.
Выберите один:
надежду в свою
<app_name>/__init__.py
и добавьте:default_app_config = '<appname>.apps.<AppName>Config'
или добавьте
<appname>.apps.<AppName>Config
кINSTALLED_APPS
вместо<appname>