0

I've got empty Bootstrap modal form with Django UpdateView(CBV)

The most important question without using js , I will not be able to display data in a modal window? (I only use bootstrap.bundle.min.js in base.html)

Modal window show fields of empty form

view.py

class HistoryPamentsByService(ListView):
    model=Payments
    form_class=PaymentsForm
    template_name ='myflat/history_by_service.html'
    context_object_name='flats'
    slug_url_kwarg = 'slug'

    def get_context_data(self, **kwargs):
        context=super().get_context_data(**kwargs)
        form=PaymentsForm()
        payments=Payments.objects.filter(flats_id=self.kwargs['flats_id'])
        context['form']=form
        return context

    def get_form(self,*args,**kwargs):
        super().get_form(*args, **kwargs)
        form=PaymentsForm()
        return form

    def get_queryset(self):
        return Payments.objects.filter(slug=self.kwargs['slug'],flats_id=self.kwargs['flats_id'])

class UpdatePayments(UpdateView):
    model=Payments
    pk_url_kwarg='pk'
    template_name='myflat/update_modal.html'
    context_object_name='name_flat'
    fields=['name_service','amount_of_bill',
            'amount_of_real',
            'date_of_bill',
            'date_of_payment',
            'status_payment',
            'comments',
            'bill_save_pdf']
    def get_success_url(self):
        return reverse('HistoryPamentsByService',
        kwargs={'slug':self.object.slug,
                'flats_id': self.object.flats_id})

urls.py

urlpatterns = [ path('history_by_service/<slug:slug>/<int:flats_id>/',
                      HistoryPamentsByService.as_view(),name='HistoryPamentsByService'),
                path('UpdatePayments/<int:pk>/',UpdatePayments.as_view(),name='UpdatePayments'),
              ]

template history_by_service.html (for ListView)

{%extends "base.html"%}
{%block content%}
{% for flat in flats  %}
    <tr>
      <td scope="row">{{ forloop.counter }} </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.date_of_payment}}</td>
      <td>{{flat.get_status_payment_display}}</td>
      <td>{{flat.comments}}</td>
      <td>{{flat.bill_save_pdf}}</td>
      <td>
<form method="post" action="{% url 'UpdatePayments' flat.pk  %}" enctype="multipart/form-data">
{% csrf_token %}
<button type='button' class='btn btn-success btn-sm' id="update_modal" 
data-bs-toggle="modal"     data-bs-target="#update_modal{{flat.pk}}">
<i class="fa-regular fa-pen-to-square fa-fw"></i>Edit</button> 
{% include "myflat/update_modal.html" %}
</form> 
{% endfor %}

{% endblock content %}

template update_modal.html

<div class="modal fade" id="update_modal{{flat.pk}}" data-bs-backdrop="static" 
    data-bs-keyboard="false" tabindex="-1" aria-labelledby="update_modal" aria-hidden="true">
<div class="modal-dialog">
  <div class="modal-content" style="width:auto">
   <div class="modal-header">
     <h5 class="modal-title " id="update_modalLabel">{{flat.name_flat}}</h5>
     <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
   </div>

<form  method="post" action="{% url 'UpdatePayments' flat.pk %}" enctype="multipart/form-data">
   <div class="modal-body">
     {% csrf_token %} 
     {% for field in form %}
        {{field}}          
     {% endfor %}
   </div>
  <div class="modal-footer">
    <button type="submit" class="btn btn-primary" >
      <i class="fa-solid fa-trash fa-fw" ></i>Save</button>
    
    <button type="button" class="btn btn-warning" 
     data-bs-dismiss="modal">
     <i class="fa-regular fa-circle-xmark"></i>Close</button>
 </div>
</div>
</form>
</div>          
</div>
</div>

I try add in UpdatePayments(UpdateView) next code:

class UpdatePayments(UpdateView):
    model=Payments
    pk_url_kwarg='pk'
    form_class=PaymentsForm
    template_name='myflat/update_modal.html'
    context_object_name='name_flat'

def get_context_data(self, **kwargs):
        context= super().get_context_data(**kwargs)
        obj=Payments.objects.get(pk=self.kwargs['pk'])
        form=PaymentsForm(self.request.POST or None ,instance=obj)
        context['form']=form
        return context

but still nothing in Modal is empty fields!!! What's wrong, any helps,please!!!

olksv
  • 11
  • 2

0 Answers0