Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 str在django中没有对象外接程序_Python_Django - Fatal编程技术网

Python str在django中没有对象外接程序

Python 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.

运行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.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