EditForm不会保存我的ImageField中的图像

时间:2018-03-12 20:40:43

标签: python django django-forms

所以基本上我只是想改变用户的数据。一切都在编辑表单中工作,除了图像不会被保存。它在表单中传递,我的表单启用了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 %}

0 个答案:

没有答案