/admin/login/的RelatedObjectDoesNotExist用户没有个人资料 [英] RelatedObjectDoesNotExist at /admin/login/ User has no profile

查看:38
本文介绍了/admin/login/的RelatedObjectDoesNotExist用户没有个人资料的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

学习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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆