如何解决Django“此字段为必填”尝试更新CustomUser
在我的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)
在我的forms.py
中,我有这个:
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,**kwargs):
super(StudentForm,**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()}
传递到模板,我可以从中添加新学生。
但是现在,我在尝试更新学生方面遇到问题。
我可以将student
对象作为instance
传递给StudentForm()
,但仅设置了['course','session_end_year']
字段值。
- 如何设置
CustomUserForm
的初始值? - 我想在更新时将
password
和profile_pic
设置为可选(它说This field is required.
;我是否需要另一个modelForm
? - 建议将
CustomUserForm
和StudentForm
合并为一个表格,还是应该分开处理?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。