В одном из моих приложений django я установил следующую архитектуру:
#models.py
class Income(models.Model):
price = models.DecimalField()
quantity = models.DecimalField()
date=models.DateField()
# forms.py
class IncomeForm(forms.ModelForm):
class Meta:
model = Income
fields = "__all__"
#views.py
def income_(request):
elements = Income.objects.all()
if request.method == 'POST':
form = IncomeForm(request.POST)
if form.is_valid():
new_input = form.save()
else :
form = IncomeForm()
elements = Income.objects.all()
context= {
'form': form,
'elements':elements,
}
return render(request, "income/income.html", context)
def edit_income(request):
pk = request.GET.get('pk')
object = get_object_or_404(Income, pk = pk)
form = IncomeForm(instance=object)
return render(request, 'edit_income.html', {
'object': object,
'pk': pk,
'form': form,
})
После этого я установил следующие шаблоны URL:
path('magazzino/gestionemagazzino/', views.income_, name ='gestione_magazzino'),
path('magazzino/edit_modal/<int:materiale_pk/>', views.edit_income, name='edit_income')
В моем доходе. html файл. Я установил следующее
{% load crispy_forms_tags %}
<form id="" method="post">
<div class="form-group col-2 0 mb-0" >
{{form.quantity|as_crispy_field}}
</div>
<div class="form-group col-2 0 mb-0" >
{{form.price|as_crispy_field}}
</div>
<div class="form-group col-2 0 mb-0" >
{{form.date|as_crispy_field}}
</div>
</div>
После этого я создал таблицу, в которой перечислены все заполненные данные, и в последнем столбце я установил следующую кнопку:
<button id="myBtn" data-target="#myModal"> </button>
Теперь я хочу создать кнопку для каждой строки, которая открывает модальную форму, которая дает мне возможность изменять указанные c данные для каждого набора данных id.
Я попытался выполнить следующий сценарий:
$(document).ready(function(){
$("#myBtn").click(function(){
var pk = $(this).data('pid')
$("#myModal").modal("show");
});
$("#myModal").on('show.bs.modal', function(event){
var modal = $(this)
var pk = $(this).data('pid')
$.ajax({
data: {'pk': pk},
url: "{% url 'edit_income' %}",
context: document.body,
error: function(response, error) {
alert(error);
}
}).done(function(response) {
modal.html(response);
});
});
});
Это открывает следующий edit_income. html:
<div class="modal-dialog modal-lg" role="document">
<form action="{% url 'edit_paper' pk=object.pk %}" method="post" class="form" enctype="multipart/form-data">
{% csrf_token %}
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
<span class="sr-only">Close</span>
</button>
<h4 class="modal-title">Edit Income</h4>
</div>
<div class="modal-body">
{% csrf_token %}
{{form|crispy}}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<input type="submit" class="btn btn-primary" value="Save changes" />
</div>
</div><!-- /.modal-content -->
</form>
</div>
Но если я нажимаю на кнопку, ничего не работает. В чем проблема?