Django UpdateView FileField не разворачивается в форме
model.py
class Payments(models.Model):
STATUS_CHOICES = (
('', 'Нажмите на поле, чтобы выбрать статус оплаты'),
('true', 'да'),
('false', 'нет'),
)
CHOICES_NAME_SERVICE = (('','Нажмите на поле, чтобы выбрать вид услуги'),
('Коммунальная услуга','Коммунальная услуга'),
('Капитальный ремонт','Капитальный ремонт'),)
flats=models.ForeignKey(Flat,on_delete=models.PROTECT)
name_flat=models.CharField(max_length=60, )
name_service=models.CharField(max_length=30,choices=CHOICES_NAME_SERVICE)
slug=models.SlugField(max_length=60)
amount_of_bill=models.DecimalField(max_digits=10,decimal_places=2)
amount_of_real=models.DecimalField(max_digits=10,decimal_places=2)
date_of_bill=models.DateField()
date_of_payment=models.DateField(auto_now_add=True)
status_payment=models.CharField(max_length=5,choices=STATUS_CHOICES,)
comments=models.TextField(blank=True)
bill_save_pdf=models.FileField(upload_to='Bill_pdf/%d/%m/%Y/')
def __str__(self) -> str:
return f'{self.name_flat}'
class Meta:
ordering=['name_flat']
def save(self, *args, **kwargs):
self.slug = slugify(self.name_service)
super().save(*args, **kwargs)
def delete(self, *args, **kwargs):
self.bill_save_pdf.delete()
super().delete(*args, **kwargs)
view.py
class UpdatePayments(UpdateView):
model=Payments
form_class=PaymentsForm
template_name='myflat/add_payment.html'
context_object_name='name_flat'
def get_success_url(self):
print(self.object.pk)
return reverse('HistoryPamentsByService' ,kwargs=
{'slug':self.object.slug,'flats_id': self.object.flats_id})
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
payment=Payments.objects.get(pk=self.kwargs['pk'])
context['form']=PaymentsForm(instance=payment)
print(self.request.POST)
return context
forms.py
class PaymentsForm(forms.ModelForm):
class Meta:
model=Payments
fields=['name_service','amount_of_bill','amount_of_real',
'date_of_bill','status_payment',
'comments','bill_save_pdf']
labels = {
'name_service': ('Название услуги'),
'amount_of_bill': ('Сумма счета'),
'amount_of_real': ('Оплачено'),
'date_of_bill': ('Дата счета'),
'status_payment': ('Статус оплаты'),
'comments': ('Комментарий'),
'bill_save_pdf': ('Счет'),
}
widgets={
'name_service':forms.Select(attrs={"class":"form-control"}),
'amount_of_bill':forms.NumberInput(
attrs={"class":"form-control",'placeholder':'Сумма счета 0.00руб'}),
'amount_of_real':forms.NumberInput(
attrs={"class":"form-control",'placeholder':'Оплачено 0.00руб'}),
'date_of_bill':forms.DateInput(format=('%Y-%m-%d'),
attrs={"class":"form-control",'placeholder':'Дата счета','type':'date'}),
'status_payment':forms.Select(choices=(('','None'),),
attrs={"class":"form-control"},),
'comments':forms.Textarea(
attrs={"class":"form-control",'placeholder':'Комментарий...','rows':2}),
'bill_save_pdf':forms.FileInput(
attrs={"class":"form-control",'placeholder':'Счет'}),
}
urls.py
urlpatterns = [
path('',CreateNewFlat.as_view(),name='CreateFlat'),
path('list_flats',ListCreatedFlats.as_view(),name='ListCreatedFlats'),
path('add_payment/<int:pk>/',AddPayment.as_view(),name='AddPayment'),
path('group_payments/',GroupPayments.as_view(),name='GroupPayments'),
path('history_by_service/<slug:slug>/<int:flats_id>/',
HistoryPamentsByService.as_view(),name='HistoryPamentsByService'),
path('UpdatePayments/<int:pk>/',UpdatePayments.as_view(),name='UpdatePayments'),
path('DelPayment/<int:pk>/',DelPayment.as_view(),name='DelPayment'),
]
history_by_service.html
{% extends "base.html" %}
{% block title %}
История платежей по видам услуг
{% endblock title %}
{% block sidebar %}
<table class="table table-lg table-hover">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Название квартиры</th>
<th scope="col">Услуга</th>
<th scope="col">Сумма по счету</th>
<th scope="col">Сумма оплачена</th>
<th scope="col">Дата счета</th>
<th scope="col">Статус оплаты</th>
<th scope="col">Комментарий</th>
<th scope="col">Счет</th>
<th scope="col">Редактировать</th>
<th scope="col">Удалить оплату</th>
</tr>
</thead>
<tbody>
{% for flat in flats %}
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<tr>
<th scope="row">{{ forloop.counter }} </th>
<td>{{flat.name_flat}}</td>
<td>{{flat.name_service}}</td>
<td>{{flat.amount_of_bill}}</td>
<td>{{flat.amount_of_real}}</td>
<td>{{flat.date_of_bill}}</td>
<td>{{flat.get_status_payment_display}}</td>
<td>{{flat.commnts}}</td>
<td>{{flat.bill_save_pdf}}</td>
<td>
<button type='submit' class="btn btn-success btn-sm" formaction="{% url 'UpdatePayments' flat.pk %}">update</button>
</form>
</td>
<td>
<form method="post" action="{% url 'DelPayment' flat.pk %}">
{% csrf_token %}
<button type='submit' class='btn btn-danger btn-sm'>delete</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock sidebar %}
add_payment.html
{% extends "base.html" %}
{% block title %}
Оплата по квартире {{name_flat}}
{% endblock title %}
{% block content %}
<div class="d-flex flex-row justify-content-center mt-3">
<form class="row" method="post" enctype="multipart/form-data">
{%csrf_token%}
<div class="row">
<div class="col">
<h2>{{name_flat}}</h2>
</div>
</div>
<div class="row">
<div class="col-auto">
{{ form.as_p}}
<div class="row justify-content-end">
<div class="col-auto">
<button type="submit" class="btn btn-primary mb-3">Save</button>
</div>
</div>
</div>
</div>
</form>
{% endblock content %}
это изображение history_by_service.html
потом нажимаем обновить картинку у меня есть форма без заполненного поля FileField
какой код нужно добавить в UpdateView, чтобы получить заполненное поле FileField в форме?
большое спасибо!!!