所以基本上我只是想改变用户的数据。一切都在编辑表单中工作,除了图像不会被保存。它在表单中传递,我的表单启用了enctype,并在视图中添加了request.FILES
,但似乎没有任何效果。在调试时,我只得到我的表单没有这样的“照片”属性。
class StudentEditForm(forms.ModelForm):
email = forms.EmailField(
required=True,
widget=forms.EmailInput(
attrs={'placeholder': "E-mail Address", 'class': 'email'}
)
)
name = forms.CharField(
max_length=50,
required=True,
widget=forms.TextInput(
attrs={'placeholder': "Name", 'class': 'name'}
)
)
surname = forms.CharField(
max_length=50,
required=True,
widget=forms.TextInput(
attrs={'placeholder': "Surname", 'class': 'surname'}
)
)
photo = forms.ImageField(
required=True,
error_messages={'required': 'A profile picture is required.'},
widget=forms.FileInput(
attrs={'class': 'profile_pic'}
)
)
phone = forms.CharField(
max_length=15,
required=True,
validators=[
RegexValidator(regex='^[0-9+]+$', message='Not a valid phone number.')
],
widget=forms.TextInput(
attrs={'placeholder': "Phone Number", 'class': 'phone'}
)
)
class Meta:
model = Student
fields = ('email', 'name', 'surname', 'phone', 'photo')
@login_required
def profile_edit(request):
user = request.user
student = request.user.student
teacher = request.user.teacher
if user.is_teacher:
if request.method != 'POST':
form = TeacherEditForm(instance=teacher)
else:
form = TeacherEditForm(request.POST, request.FILES, instance=teacher)
if form.is_valid():
user.email = form.cleaned_data['email']
user.first_name = form.cleaned_data['name']
user.last_name = form.cleaned_data['surname']
user.save()
form.save()
return redirect('index')
elif user.is_student:
if request.method != 'POST':
form = StudentEditForm(instance=student)
else:
form = StudentEditForm(request.POST, request.FILES, instance=student)
if form.is_valid():
user.email = form.cleaned_data['email']
user.first_name = form.cleaned_data['name']
user.last_name = form.cleaned_data['surname']
user.save()
form.save()
return redirect('index')
import ipdb
ipdb.set_trace()
context = {
"form": form,
}
return render(request, "registration/profile_edit.html", context)
{% if user.is_student %}
<div id="profile-edit">
<a id="close" href="{% url "index" %}"><i class="fas fa-times"></i></a>
<form class="main-form" method="post" enctype="multipart/form-data">
{% csrf_token %}
<h3 id="sign-title">Edit Profile</h3>
<p class="field"> {{ form.email }}</p><br>
<p class="field"> {{ form.name }}</p><br>
<p class="field"> {{ form.surname }}</p><br>
<p class="field"> {{ form.phone }}</p><br>
<label id="file1" for="file-upload" class="custom-file-upload">
<i class="fas fa-cloud-upload-alt"></i> Profile Photo
</label>
<span id="file-selected"></span>
<input id="file-upload" name='student-photo' type="file" style="display:none"/>
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong id="errors">{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<button type="submit" class="btn btn-default">Save</button>
</form>
</div>
<script>
$('#file-upload').bind('change', function () {
var fileName = '';
fileName = $(this).val();
$('#file-selected').html(fileName.split(/(\\|\/)/g).pop());
});
</script>
{% endif %}