Я пытаюсь обновить фотографию профиля клиента. Но это не обновление. 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' %}"> ← 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 %}