Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python RelatedObjects没有位于/register/User的文本列表没有学校配置文件_Python_Django_Django Models_Django Views_Django Forms - Fatal编程技术网

Python RelatedObjects没有位于/register/User的文本列表没有学校配置文件

Python RelatedObjects没有位于/register/User的文本列表没有学校配置文件,python,django,django-models,django-views,django-forms,Python,Django,Django Models,Django Views,Django Forms,您好,我正在尝试创建一个学校配置文件,当用户(schooluser)注册时,该配置文件已创建,但给出了错误相关的objectdoesnotextister at/register/user没有学校配置文件。奇怪的是,在管理中,当您尝试编辑创建的学校配置文件的任何字段时,模型字段都是空的。 救命啊 models.py 班级学校简介(models.Model): user=models.OneToOneField(用户,在_delete=models.CASCADE上,相关的_name='schoo

您好,我正在尝试创建一个学校配置文件,当用户(schooluser)注册时,该配置文件已创建,但给出了错误相关的objectdoesnotextister at/register/user没有学校配置文件。奇怪的是,在管理中,当您尝试编辑创建的学校配置文件的任何字段时,模型字段都是空的。 救命啊

models.py
班级学校简介(models.Model):
user=models.OneToOneField(用户,在_delete=models.CASCADE上,相关的_name='schoolprofile')
schoolname=models.CharField(最大长度=200)
region=models.CharField(最大长度=200)
district=models.CharField(最大长度=200)
代码=models.CharField(最大长度=20)
logo=models.ImageField(default='default.jpg',上传到'logos')
定义(自我):
返回f'{self.user.username}配置文件'
def保存(自身、*args、**kwargs):
super().save(*args,**kwargs)
forms.py 来自django导入表单的

从django.contrib.auth.models导入用户
从django.contrib.auth.forms导入UserCreationForm
从。模型导入学校档案
班级注册执行(UserCreationForm):
email=forms.EmailField()
类元:
模型=用户
字段=['username'、'email'、'password1'、'password2']
班级学校档案表(forms.ModelForm):
类元:
模型=学校简介
字段=['schoolname','code','region']
views.py
from.forms导入schoolRegisterPerform,SchoolProfileForm
def寄存器(请求):
如果request.method==“POST”:
表单=学校注册执行(request.POST)
s_profile_form=SchoolProfileForm(request.POST)
如果form.is_valid()和s_profile_form.is_valid():
form.save()
request.user.refresh\u from_db()
s_profile_form=SchoolProfileForm(request.POST,instance=request.user.schoolprofile)
s_profile_form.full_clean()
s_profile_form.save()
username=form.cleaned\u data.get('username'))
messages.success(请求,“您的帐户已创建!您现在可以登录了!”)
返回重定向('仪表板')
其他:
表单=学校注册执行()
s_profile_form=SchoolProfileForm()
返回呈现(请求'accounts/register.html',{'form':form,'s_profile_form':s_profile_form})

您使用了
request.user.schoolprofile
,但是您的用户(现在)本身没有相关的
schoolprofile
对象,因此出现了错误。此外,创建用户不会(自动)登录该用户。您可以在
s\u profile\u表单
中包装的实例中更改
.user
字段:

def register(request):
    if request.method == 'POST':
        form = SchoolRegisterForm(request.POST)
        s_profile_form = SchoolProfileForm(request.POST)
        if form.is_valid() and s_profile_form.is_valid():
            user = form.save()
            s_profile_form.instance.user = user
            s_profile_form.save()
            messages.success(request, f'Your account has been created! You are now able to log in!')
            return redirect('dashboard')
    else:
        form = SchoolRegisterForm()
        s_profile_form = SchoolProfileForm()
    return render(request, 'accounts/register.html', {'form': form,'s_profile_form':s_profile_form})
def寄存器(请求):
如果request.method==“POST”:
表单=学校注册执行(request.POST)
s_profile_form=SchoolProfileForm(request.POST)
如果form.is_valid()和s_profile_form.is_valid():
user=form.save()
s_profile_form.instance.user=用户
s_profile_form.save()
messages.success(请求,“您的帐户已创建!您现在可以登录了!”)
返回重定向('仪表板')
其他:
表单=学校注册执行()
s_profile_form=SchoolProfileForm()
返回呈现(请求'accounts/register.html',{'form':form,'s\u profile\u form':s\u profile\u form})

注意:通常最好使用来引用用户模型,而不是直接使用。有关更多信息,请参见


您提供的说明我看不出有多大区别您能提供一些示例吗请我尝试过您的解决方案我收到此错误IntegrityError at/register/UNIQUE constraint失败:accounts\u schoolprofile.user_id@cipher:这是因为您正在向已存在的用户注册配置文件。您不应该在
schoolRegisterPerform
中指定
instance=…
,因为您正在为该用户创建一个新的
SchoolProfile
。@cipher:您是否碰巧使用了signals来创建
SchoolProfile
?是的,我使用了signals