Python str在django中没有对象外接程序
运行manage.py时获取此错误消息 /accounts/signup/teacher/'str'对象的AttributeError没有 属性“添加” 这是我编写的代码-> forms.py models.pyPython str在django中没有对象外接程序,python,django,Python,Django,运行manage.py时获取此错误消息 /accounts/signup/teacher/'str'对象的AttributeError没有 属性“添加” 这是我编写的代码-> forms.py models.py #mentor model class Mentor(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) email = models.
#mentor model
class Mentor(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
email = models.EmailField(max_length=100)
firstname = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
linkedin = models.URLField(max_length=200,null=True,blank=True)
phonenumber = models.IntegerField(null=True,unique=True)
和看法
class TeacherSignUpView(CreateView):
model = User
form_class = TeacherSignUpForm
template_name = 'registration/signup_form.html'
def get_context_data(self, **kwargs):
kwargs['user_type'] = 'teacher'
return super().get_context_data(**kwargs)
def form_valid(self, form):
user = form.save()
login(self.request, user)
return redirect('teachers:app-instructor-dashboard')
当我尝试以导师/教师身份登录时,会收到此错误消息。然后,它会将我重定向到应用程序讲师仪表板您的视图没有多大意义。一个
EmailField
和一个UrlField
只不过是CharField
s加上一些额外的验证。这些不是电子邮件的集合(列表等)
因此,应指定如下值:
class TeacherSignUpForm(UserCreationForm):
email = forms.EmailField(max_length=100)
firstname = forms.CharField(max_length=100)
lastname = forms.CharField(max_length=100)
phonenumber = forms.IntegerField(required=True)
linkedin = forms.URLField(max_length=200)
class Meta(UserCreationForm.Meta):
model = User
def save(self, commit=True):
self.instance.is_teacher = True
user = super().save()
mentor = Mentor.objects.create(
user=user,
email=self.cleaned_data['email'],
firstname=self.cleaned_data['firstname'],
lastname=self.cleaned_data['lastname'],
phonenumber=self.cleaned_data['phonenumber'],
linkedin=self.cleaned_data['linkedin']
)
return user
class TeacherSignUpForm(UserCreationForm):
email=forms.EmailField(最大长度=100)
firstname=forms.CharField(最大长度=100)
lastname=forms.CharField(最大长度=100)
phonenumber=forms.IntegerField(必需=True)
linkedin=forms.URLField(最大长度=200)
类元(UserCreationForm.Meta):
模型=用户
def save(self,commit=True):
self.instance.is_teacher=True
user=super().save()
mentor=mentor.objects.create(
用户=用户,
email=自我清理的_数据['email'],
firstname=self.cleaned_数据['firstname'],
lastname=self.cleaned_数据['lastname'],
phonenumber=self.cleaned_数据['phonenumber'],
linkedin=self.cleaned_数据['linkedin']
)
返回用户
请注意,首先需要保存
user
对象。不是在数据库端创建的User
对象不能用于创建Mentor
对象,因为它没有主键可使用。Mentor.email
只是一个字符串,因此Mentor.email.add(…)
没有意义。对所有其他的.add(…)
s也是一样。@WillemVanOnsem谢谢,我猜要检索用户填写的名字,我只需要在我的html文件中写{{mentor.firstname}}?谢谢,我会接受,假设我可以使用{mentor.firstname}在html文件中显示一个mentor对象?@Emm是的,你可以。
class TeacherSignUpForm(UserCreationForm):
email = forms.EmailField(max_length=100)
firstname = forms.CharField(max_length=100)
lastname = forms.CharField(max_length=100)
phonenumber = forms.IntegerField(required=True)
linkedin = forms.URLField(max_length=200)
class Meta(UserCreationForm.Meta):
model = User
def save(self, commit=True):
self.instance.is_teacher = True
user = super().save()
mentor = Mentor.objects.create(
user=user,
email=self.cleaned_data['email'],
firstname=self.cleaned_data['firstname'],
lastname=self.cleaned_data['lastname'],
phonenumber=self.cleaned_data['phonenumber'],
linkedin=self.cleaned_data['linkedin']
)
return user