/admin/login/的RelatedObjectDoesNotExist用户没有个人资料 [英] RelatedObjectDoesNotExist at /admin/login/ User has no profile
问题描述
学习django并创建了一个新项目.通过
user/models.py
django.db导入模型中的 从django.contrib.auth.models导入用户从PIL导入图像类Profile(models.Model):user = models.OneToOneField(User,on_delete = models.CASCADE)image = models.ImageField(默认='default.jpg',upload_to ='profile_pics')def __str __():返回f'{self.user.username}个人资料'def save(self):super().save()img = Image.open(self.image.path)如果img.height> 300或img.width> 300:output_size =(300,300)img.thumbnail(output_size)img.save(self.image.path)
user/views.py
来自django.shortcuts的 导入渲染,重定向从django.contrib.auth.forms导入UserCreationForm从django.contrib导入消息从django.contrib.auth.decorators导入login_required从.forms导入UserRegisterForm,UserUpdateForm,ProfileUpdateFormdef寄存器(请求):如果request.method =="POST":表格= UserRegisterForm(request.POST)如果form.is_valid():form.save()#它将用户保存在数据库中#form.cleaned_data是字典,它将包含来自表单的数据用户名= form.cleaned_data.get('用户名')messages.success(请求,您的帐户已创建!")返回重定向(登录")别的:form = UserRegisterForm()#UserCreationForm()类的实例将在我们传递到模板时在模板中创建表单返回render(request,'users/register.html',{'form':form})@需要登录()def配置文件(要求):如果request.method =="POST":u_form = UserUpdateForm(request.POST,instance = request.user)p_form = ProfileUpdateForm(request.POST,request.FILES,instance = request.user.profile)如果u_form.is_valid()和p_form.is_valid():u_form.save()p_form.save()messages.success(请求,您的帐户已更新!")返回重定向(配置文件")别的:u_form = UserUpdateForm(instance = request.user)p_form = ProfileUpdateForm(instance = request.user.profile)上下文= {'u_form':u_form,'p_form':p_form}返回render(request,'users/profile.html',context)
users/forms.py
Django导入表单中的 从django.contrib.auth.models导入用户从django.contrib.auth.forms导入UserCreationForm从.models导入配置文件类UserRegisterForm(UserCreationForm):email = forms.EmailField()类Meta:model = User #model将受影响的用户将是提交表单用户表后的用户.下面将以表格形式显示字段fields = ['用户名','电子邮件','密码1','密码2']类UserUpdateForm(forms.ModelForm):电子邮件= Forms.EmailField()类Meta:模型=用户#模型将受到影响,将是用户,因为在提交表单后,用户表将受到影响.下面将以表格形式显示字段字段= ['用户名','电子邮件']类ProfileUpdateForm(forms.ModelForm):类Meta:型号=配置文件字段= ['图像']
users/signals.py
来自django.db.models.signals的 导入post_save从django.contrib.auth.models导入用户从django.dispatch导入接收器从.models导入配置文件@receiver(post_save,sender = User)def create_profile(发件人,实例,创建的,**假的):如果创建:Profile.objects.create(user = instance)@receiver(post_save,sender = User)def save_profile(发件人,实例,创建的,** kwargs):instance.profile.save()
可能是管理员配置文件不可用并且没有创建.有任何建议吗?
您需要先创建一个管理员配置文件.由于管理员没有配置文件,因此显示不存在相关对象.我遇到了类似的情况,并创建了一个管理员个人资料.可行
learning django and created a new project. login to admin page through http://127.0.0.1:8000/admin But after adding profile code for every user I am getting the below error
Error
user/models.py
from django.db import models
from django.contrib.auth.models import User
from PIL import Image
class Profile(models.Model):
user=models.OneToOneField(User,on_delete=models.CASCADE)
image=models.ImageField(default='default.jpg',upload_to='profile_pics')
def __str__(self):
return f'{self.user.username} Profile'
def save(self):
super().save()
img=Image.open(self.image.path)
if img.height>300 or img.width >300:
output_size=(300,300)
img.thumbnail(output_size)
img.save(self.image.path)
user/views.py
from django.shortcuts import render,redirect
from django.contrib.auth.forms import UserCreationForm
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .forms import UserRegisterForm,UserUpdateForm,ProfileUpdateForm
def register(request):
if request.method=="POST":
form=UserRegisterForm(request.POST)
if form.is_valid():
form.save() # it will save user in database
#form.cleaned_data is dictionary it will contain the data from form
username=form.cleaned_data.get('username')
messages.success(request,f'Your account has been created!')
return redirect('login')
else:
form=UserRegisterForm()
# instance of UserCreationForm() class will create form in template as we are passing there
return render(request,'users/register.html',{'form':form})
@login_required()
def profile(request):
if request.method == "POST":
u_form=UserUpdateForm(request.POST,instance=request.user)
p_form=ProfileUpdateForm(request.POST,request.FILES,instance=request.user.profile)
if u_form.is_valid() and p_form.is_valid():
u_form.save()
p_form.save()
messages.success(request, f'Your account has been updated!')
return redirect('profile')
else:
u_form = UserUpdateForm(instance=request.user)
p_form = ProfileUpdateForm(instance=request.user.profile)
context={
'u_form':u_form,
'p_form':p_form
}
return render(request,'users/profile.html',context)
users/forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Profile
class UserRegisterForm(UserCreationForm):
email=forms.EmailField()
class Meta:
model=User #model will affected will be User as after submitting form user table gonna affect. and below will fields in forms
fields=['username','email','password1','password2']
class UserUpdateForm(forms.ModelForm):
email = forms.EmailField()
class Meta:
model = User # model will affected will be User as after submitting form user table gonna affect. and below will fields in forms
fields = ['username', 'email']
class ProfileUpdateForm(forms.ModelForm):
class Meta:
model=Profile
fields=['image']
users/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)
@receiver(post_save, sender=User)
def save_profile(sender, instance, created, **kwargs):
instance.profile.save()
it might be that the Admin profile is not available and it is not creating.any suggestions ?
You need to create an admin profile first. Since the admin has no profile, it's showing related objects doesn't exist. I faced a similar situation and I created an admin profile. It worked
这篇关于/admin/login/的RelatedObjectDoesNotExist用户没有个人资料的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!