微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 3.1,我没有收到User和Profile模型的RelatedObjectDoesNotExist错误

如何解决Django 3.1,我没有收到User和Profile模型的RelatedObjectDoesNotExist错误

标题显示为,我在Django 3.1(最新版本)中未收到RelatedobjectDoesNotExist错误 我没有使用信号。我使用(python manage.py createsuperuser)命令创建了一个超级用户,正如预期的那样,该命令不会创建配置文件

models.py '''

class User(AbstractUser):
    pass


class Profile(models.Model):
    user = models.OnetoOneField(User,on_delete=models.CASCADE)
    birth_date = models.DateField(null=True,blank=True)

'''

views.py

'''

class RegisterView(View):

    def get(self,request):
        form = UserSignUpForm()
        # print(form)
        return render(request,'users/register.html',{'form': form})

    def post(self,request):
        form = UserSignUpForm(request.POST)

        if form.is_valid():
            form.save()

            username = request.POST.get('username')
            Profile.objects.create(user=User.objects.get(username=username))

            return redirect('users:login-page')
        return render(request,{'form': form})

'''

当我使用createsuperuser命令时,不会创建任何配置文件,因此,如果我尝试登录,则希望获得RelatedobjectDoesNotExist。但是我不这样做!这是为什么?同样,如果我手动编辑数据库删除配置文件并保留用户,则该用户仍然可以正常工作,不会出现RelatedobjectDoesNotExist错误! Django 3.1改变了这一点吗?

谢谢

解决方法

我实际上发现了问题。 在没有连接用户模型和个人档案模型的信号的情况下,Django无法告诉已登录用户的个人档案丢失,并且未引发任何错误。

,

尝试在同一文件夹中创建一个新的signals.py,并在下面创建 create_profile 和 save_profile 函数,应该可以工作。

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,**kwargs):
    instance.profile.save()  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。