现在,我正在努力理解表单是如何工作的,并且我通过示例学习。现在,我正在尝试设置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
答案 0 :(得分:1)
你几乎就在那里。尝试直接从sub $0x10,%rsp
movl $0x1,-0x4(%rbp)
movl $0x2,-0x8(%rbp)
继承Student
并删除包含两个布尔值的用户模型。
接下来将AbstractUser
的{{1}}指向model
,然后重试。
你不需要布尔,班级StudentSignUpForm.Meta
(和/或Student
)已经告诉你他们属于那种。
顺便说一句,Student
中的某些字段可能会与Teacher
中的字段发生冲突。放下它们也是因为你已经拥有它们。