如何使用表单信息

时间:2018-01-22 18:06:57

标签: python django

现在,我正在努力理解表单是如何工作的,并且我通过示例学习。现在,我正在尝试设置2个模型:教师和学生,以便这些模型从登录用户(教师和学生)以及管理员面板获取他们的条目。所以我创建了这两个模型,并为教师制作了不同的视图和表单,以便他们可以通过扩展AbstractUser来创建帐户。此型号仅提供用户名,电子邮件,密码和密码确认。正如您所看到的,例如,在我的学生模型中;照片,电子邮件和电话都是空白=真。也就是说,因为我希望主管只添加姓名,姓氏和student_ID。当学生创建帐户时,他也需要输入这些其他字段。而且,我希望如果他的名字,姓氏和student_ID与模特中的那些不匹配,他将无法创建他的帐户。我不知道这种方法是好还是我开始不好,所以我想要一些建议。这是我试过的:

class StudentSignUpView(CreateView):
    model = User
    form_class = StudentSignUpForm
    template_name = 'student_signup_form.html'

    def get_context_data(self, **kwargs):
        kwargs['user_type'] = 'student'
        return super().get_context_data(**kwargs)

    def form_valid(self, form):
        user = form.save()
        login(self.request, user)
        return redirect('index')
class StudentSignUpForm(UserCreationForm):
    name = forms.CharField(max_length=50)
    surname = forms.CharField(max_length=50)
    student_ID = forms.CharField(max_length=14, min_length=14)
    photo = forms.ImageField(required=False)
    email = forms.EmailField()
    phone = forms.CharField()

    class Meta(UserCreationForm.Meta):
        model = User
        fields = (
            'username', 'email', 'name', 'surname', 'student_ID', 'photo',
            'email', 'phone', 'password1', 'password2')

    def save(self, commit=True):
        user = super().save(commit=False)
        user.is_student = True
        if commit:
            user.save()
        return user
class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)


class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, default=None)
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)
    student_ID = models.CharField(unique=True, max_length=14,
                                  validators=[RegexValidator(regex='^.{14}$',
                                                             message='The ID needs to be 14 characters long.')])
    photo = models.ImageField(upload_to='students_images')
    email = models.EmailField()
    phone = models.CharField(max_length=15, )

    def __str__(self):
        return self.name

1 个答案:

答案 0 :(得分:1)

你几乎就在那里。尝试直接从sub $0x10,%rsp movl $0x1,-0x4(%rbp) movl $0x2,-0x8(%rbp) 继承Student并删除包含两个布尔值的用户模型。 接下来将AbstractUser的{​​{1}}指向model,然后重试。

你不需要布尔,班级StudentSignUpForm.Meta(和/或Student)已经告诉你他们属于那种。

顺便说一句,Student中的某些字段可能会与Teacher中的字段发生冲突。放下它们也是因为你已经拥有它们。