Python 如何使用表单信息填充django模型

Python 如何使用表单信息填充django模型,python,django,Python,Django,现在我正在努力理解表单是如何工作的,我是一个通过示例学习的人。现在,我正在尝试设置两个模型:教师和学生,以便这些模型可以从登录用户(教师和学生)以及管理面板中获取条目。因此,我制作了这两个模型,并为教师制作了不同的视图和表单,以便他们可以通过扩展AbstractUser来创建帐户。此型号仅提供用户名、电子邮件、密码和密码确认。如你所见,例如,在我的学生模型中;照片、电子邮件和电话为空=真。也就是说,因为我只希望主管添加姓名、姓氏和学生ID。当学生创建帐户时,他还需要输入这些其他字段。而且,我希望

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

class StudentSignUpView(CreateView):
模型=用户
form_class=学生注册表格
模板名称='student\u signup\u form.html'
def获取上下文数据(自身,**kwargs):
kwargs['user_type']='student'
return super().获取上下文数据(**kwargs)
def表单_有效(自身、表单):
user=form.save()
登录(self.request,用户)
返回重定向(“索引”)
class StudentSignUpForm(UserCreationForm):
name=forms.CharField(最大长度=50)
姓氏=forms.CharField(最大长度=50)
学生ID=forms.CharField(最大长度=14,最小长度=14)
photo=forms.ImageField(必需=False)
email=forms.EmailField()
phone=forms.CharField()
类元(UserCreationForm.Meta):
模型=用户
字段=(
‘用户名’、‘电子邮件’、‘姓名’、‘姓氏’、‘学生证’、‘照片’,
“电子邮件”、“电话”、“密码1”、“密码2”)
def save(self,commit=True):
user=super().save(commit=False)
user.is_student=True
如果提交:
user.save()
返回用户
类用户(抽象用户):
is_student=models.BooleanField(默认值=False)
is_teacher=models.BooleanField(默认值=False)
班级学生(模型。模型):
user=models.OneToOneField(用户,on_delete=models.CASCADE,主键=True,默认值=None)
name=models.CharField(最大长度=50)
姓氏=models.CharField(最大长度=50)
学生ID=models.CharField(唯一性=True,最大长度=14,
validators=[RegexValidator(regex='^.{14}$',
message='ID需要有14个字符长。')】
photo=models.ImageField(上传到class='students\u images')
email=models.EmailField()
phone=models.CharField(最大长度=15,)
定义(自我):

返回self.name
您就快到了。尝试直接从
AbstractUser
继承
Student
,并删除包含两个布尔值的用户模型。 下一步将
StudentSignUpForm.Meta的
model
指向
Student
,然后重试

你不需要布尔人,班上的学生(和/或老师)已经告诉你他们是那种人

顺便说一下,
Student
中的一些字段可能与
AbstractUser
中的字段冲突。把它们也扔掉,因为你已经有了它们