/register/User处的RelatedObjectDoesNotExist没有学校配置文件



你好,当用户(schooluser(注册时,我试图创建一个学校配置文件,该配置文件已创建,但在/register/user处出现错误RelatedObjectDoesNotExist时,没有学校配置文件。奇怪的是,在管理员中,当您试图编辑创建的学校配置文件的任何字段时,模型字段都是空的。帮助

型号.py

class SchoolProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,related_name='schoolprofile')
schoolname = models.CharField(max_length=200)
region = models.CharField(max_length=200)
district = models.CharField(max_length=200)
code = models.CharField(max_length=20)
logo = models.ImageField(default='default.jpg', upload_to='logos')
def __str__(self):
return f'{self.user.username} Profile'
def save(self, *args, **kwargs):
super().save(*args, **kwargs)

forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import SchoolProfile

class SchoolRegisterForm(UserCreationForm):
email = forms.EmailField()

class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']

class SchoolProfileForm(forms.ModelForm):
class Meta:
model = SchoolProfile
fields = ['schoolname', 'code', 'region']

视图.py

from .forms import SchoolRegisterForm,SchoolProfileForm

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():
form.save()
request.user.refresh_from_db()  
s_profile_form = SchoolProfileForm(request.POST, instance=request.user.schoolprofile)
s_profile_form.full_clean()
s_profile_form.save()
username = form.cleaned_data.get('username')
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})

您使用request.user.schoolprofile,但您的用户(现在(本身没有相关的SchoolProfile对象,因此出现错误。此外,创建用户不会(自动(登录该用户。您可以更改封装在s_profile_form:中的实例中的.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})

注意:通常使用settings.AUTH_USER_MODEL[Django-doc]来引用用户模型比直接使用User模型[Django-dc]更好。有关更多信息,请参阅文档中引用User模型的部分。

最新更新