【发布时间】:2018-01-27 15:26:46
【问题描述】:
所以我有一个继承自 AbstractUser 的学生模型。我在一个视图中使用了 2 个表格进行注册,因为我需要将电子邮件、姓名和姓氏放在我的学生数据库(以及其他字段)中。现在我正在尝试制作一个更新配置文件视图,其中包含我专门为更新信息而制作的 2 个表单。但我想我弄错了..这里可能需要一点帮助。我需要学生能够更新他的电子邮件(来自用户模型)和他的照片、电话、姓名和姓氏(在学生模型中)。
<form method="POST" action="{% url 'profile_edit' %}" class="" >
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save</button>
</form>
def profile_edit(request):
user = request.user
form1 = UserEditForm(request.POST or None, initial={'email': user.email,
})
form2 = StudentEditForm(request.POST or None, initial={'name': user.student.name,
'surname': user.student.surname,
'phone': user.student.phone,
'photo': user.student.photo})
if request.method == 'POST':
if form1.is_valid() and form2.is_valid():
user.email = request.POST['name']
user.student.name = request.POST['name']
user.student.surname = request.POST['surname']
user.student.phone = request.POST['phone']
user.student.photo = request.POST['photo']
user.save()
return render(request, 'index.html')
context = {
"form1": form1,
"form2": form2
}
return render(request, "registration/profile_edit.html", context)
class UserForm(forms.ModelForm):
email = forms.EmailField(required=True)
password = forms.CharField(label='Password', max_length=32, required=True, widget=forms.PasswordInput)
confirm_password = forms.CharField(label='Confirm', max_length=32, required=True, widget=forms.PasswordInput,
help_text="Passwords must match!")
class StudentForm(forms.ModelForm):
name = forms.CharField(max_length=30, required=True)
surname = forms.CharField(max_length=50, required=True)
student_ID = forms.CharField(required=True, max_length=14, min_length=14)
photo = forms.ImageField(required=True)
phone = forms.CharField(max_length=15, required=True)
class Meta:
model = Student
fields = ('name', 'surname', 'phone', 'student_ID', 'photo')
class UserEditForm(forms.ModelForm):
email = forms.EmailField(required=False)
class Meta:
model = User
fields = ('email',)
class StudentEditForm(forms.ModelForm):
name = forms.CharField(max_length=30)
surname = forms.CharField(max_length=50)
photo = forms.ImageField(required=False)
phone = forms.CharField(max_length=15, required=False)
class Meta:
model = Student
fields = ('name', 'surname', 'phone', 'photo')
问题是我没有得到表单,所以我要么在视图中做错了,要么是表单。
【问题讨论】: