фотография профиля не обновляется после загрузки другой фотографии в Django. request.FILES всегда пуст. Использование Django 2.1 - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь обновить фотографию профиля клиента. Но это не обновление. request.FILES отображается пустым, если я пытаюсь напечатать.

, если я печатаю файл request.POST, он содержит загруженный файл, но его нет в request.FILES

views.py

@login_required(login_url='login')
@allowed_users(allowed_roles=['customer'])
def accountSettings(request):

    if request.method == 'POST':
        form = CustomerForm(request.POST, request.FILES, instance=customer)     
        if form.is_valid():
            form.save()

    else :
        form = CustomerForm(instance=customer)

    context = {'cust_form' : form}
    return render(request, 'accounts/account_settings.html', context)

models.py

class Customer(models.Model):
    cust_user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=True)
    phone = models.CharField(max_length=200, null=True, blank=True)
    email = models.CharField(max_length=200, null=True)
    profile_pic = models.ImageField(default="default.png", null=True, blank=True) # blank=True => not required field
    date_created = models.DateTimeField(auto_now_add=True, null=True)

    def __str__(self):
        return self.name

forms.py

class CustomerForm(ModelForm):
    class Meta:
        model = Customer
        fields = '__all__'
        exclude = ['cust_user']

Я нашел причина пустого запроса. ФАЙЛЫ не добавляют enctype = "multipart / form-data" в форму. Но я добавил это тоже.

настройки аккаунта. html

{%  extends 'accounts/main.html' %}
{% load static %}
{% block content %}

<style>
    .profile-pic{
        max-width: 200px;
        max-height:200px;
        margin: 0 auto;
        border-radius: 50%;
    }
</style>

<br>
<div class="row">
    <div class="col-md-3">
        <div class="card card-body">
            <a class="btn btn-warning" href="{% url 'home' %}"> &#8592; Back to Profile</a>
            <hr>
            <h3 style="text-align: center">Account Settings</h3>
            <hr>
            <img class="profile-pic" src="{{request.user.customer.profile_pic.url}}" >

        </div>
    </div>
    <div class="col-md-9">
        <div class="card card-body">

            <form method="POST" enctype="multipart/form-data">
                {% csrf_token %}
                {{cust_form.as_p}}

            <input class="btn btn-primary" type="submit" name="Update Information">
            </form>
        </div>
    </div>
</div>



{% endblock %}
...