“Django”;此字段为必填字段。”;在尝试更新CustomUser时

“Django”;此字段为必填字段。”;在尝试更新CustomUser时,django,django-models,django-forms,django-views,django-custom-user,Django,Django Models,Django Forms,Django Views,Django Custom User,在我的models.py中,我有: class CustomUser(AbstractUser): USER_TYPE = ((1, 'HOD'), (2, 'Staff'), (3, 'Student')) username = None email = models.EmailField(unique=True) .... class Student(models.Model): admin = models.OneToOneField(Custom

在我的
models.py
中,我有:

class CustomUser(AbstractUser):
    USER_TYPE = ((1, 'HOD'), (2, 'Staff'), (3, 'Student'))
    username = None
    email = models.EmailField(unique=True)
    ....

class Student(models.Model):
    admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
    gender = models.CharField(max_length=1, choices=GENDER)
    address = models.TextField()
    profile_pic = models.ImageField(upload_to='media')
    session_start_year = models.DateField(null=True)
    session_end_year = models.DateField(null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True)
class CustomUserForm(forms.ModelForm):
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)
    password = forms.CharField(widget=forms.PasswordInput)
    widget = {
        'password': forms.PasswordInput()
    }

    def __init__(self, *args, **kwargs):
        super(CustomUserForm, self).__init__(*args, **kwargs)
        for visible in self.visible_fields():
            visible.field.widget.attrs['class'] = 'form-control'

    class Meta:
        model = CustomUser
        fields = ['first_name', 'last_name', 'email', 'password', ]


class StudentForm(CustomUserForm):
    def __init__(self, *args, **kwargs):
        super(StudentForm, self).__init__(*args, **kwargs)
        for visible in self.visible_fields():
            visible.field.widget.attrs['class'] = 'form-control'

    class Meta(CustomUserForm.Meta):
        model = Student
        fields = CustomUserForm.Meta.fields + \
            ['course', 'gender', 'address', 'profile_pic',
                'session_start_year', 'session_end_year']
        widgets = {
            'session_start_year': DateInput(attrs={'type': 'date'}),
            'session_end_year': DateInput(attrs={'type': 'date'}),
        }
在我的
forms.py
中,我有:

class CustomUser(AbstractUser):
    USER_TYPE = ((1, 'HOD'), (2, 'Staff'), (3, 'Student'))
    username = None
    email = models.EmailField(unique=True)
    ....

class Student(models.Model):
    admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
    gender = models.CharField(max_length=1, choices=GENDER)
    address = models.TextField()
    profile_pic = models.ImageField(upload_to='media')
    session_start_year = models.DateField(null=True)
    session_end_year = models.DateField(null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True)
class CustomUserForm(forms.ModelForm):
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)
    password = forms.CharField(widget=forms.PasswordInput)
    widget = {
        'password': forms.PasswordInput()
    }

    def __init__(self, *args, **kwargs):
        super(CustomUserForm, self).__init__(*args, **kwargs)
        for visible in self.visible_fields():
            visible.field.widget.attrs['class'] = 'form-control'

    class Meta:
        model = CustomUser
        fields = ['first_name', 'last_name', 'email', 'password', ]


class StudentForm(CustomUserForm):
    def __init__(self, *args, **kwargs):
        super(StudentForm, self).__init__(*args, **kwargs)
        for visible in self.visible_fields():
            visible.field.widget.attrs['class'] = 'form-control'

    class Meta(CustomUserForm.Meta):
        model = Student
        fields = CustomUserForm.Meta.fields + \
            ['course', 'gender', 'address', 'profile_pic',
                'session_start_year', 'session_end_year']
        widgets = {
            'session_start_year': DateInput(attrs={'type': 'date'}),
            'session_end_year': DateInput(attrs={'type': 'date'}),
        }
通过将
context={'form':StudentForm()}
传递到我的模板,我可以从中添加新的学生。 但现在,我在尝试更新学生方面遇到了问题。 我能够获得
学生
对象,我将其作为
实例
传递给
StudentForm()
,但只设置了
['course'、'gender'、'address'、'profile_pic'、'session_start_year'、'session_end_year']
字段值

  • 如何设置
    CustomUserForm
    的初始值
  • 我想在更新时选择
    密码
    配置文件
    (它说
    此字段是必需的。
    ;我是否需要另一个
    模型格式
  • 建议将
    CustomUserForm
    StudentForm
    合并成一个表单,还是我应该单独处理它们