如何解决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 举报,一经查实,本站将立刻删除。