gpt4 book ai didi

javascript - 使用 django 将值传递给引导模式形式

转载 作者:行者123 更新时间:2023-12-01 02:04:50 24 4
gpt4 key购买 nike

当我在表单中使用引导模式时,它只显示第一个值。

这里是我的template.html

{% for company in companys %}
<tr>
<td>{{ company.name }}</td>
<td>{{ company.desc }}</td>
<td align="center">
<button type="button" class="btn btn-warning margin-bottom" data-toggle="modal" data-target="#modal-default2">
delete
</button>

<div class="modal fade" id="modal-default2">
<div class="modal-dialog">

<form method="post" action="{% url 'system:company_delete' pk=company.pk %}">
{% csrf_token %}

<div class="modal-content">
<div class="modal-body">
<input type="text" name="name" maxlength="100" required="" id="id_name" value="{{ company.pk }}">
<input type="submit" class="btn btn-primary" value="Delete">
</div>
</div>

</form>
</div>
</div>
</td>
</tr>

{% endfor %}

它循环所有数据,当点击删除时会弹出确认表单。但它返回相同的值。

但如果没有模态引导,它的工作正常。

示例:template.html

{% for company in companys %}
<tr>
<td>{{ company.name }}</td>
<td>{{ company.desc }}</td>
<td align="center">
<form method="post" action="{% url 'system:company_delete' pk=company.pk %}">
{% csrf_token %}
<input type="text" name="name" maxlength="100" required="" id="id_name" value="{{ company.pk }}">
<input type="submit" class="btn btn-primary" value="Delete">
</form>
</td>
</tr>

{% endfor %}

工作正常。

我应该做什么才能让它发挥作用?...

更新

views.py

# Company Crud
class CompanyListView(ListView):
context_object_name = 'companys'
model = models.Company

class CompanyCreateView(CreateView):
fields = ('name', 'desc')
model = models.Company

class CompanyUpdateView(UpdateView):
fields = ('name', 'desc')
model = models.Company

class CompanyDeleteView(DeleteView):
model = models.Company
success_url = reverse_lazy("system:company_list")

最佳答案

您的 ajax 模式将始终在模式内返回相同的值,因为:
- Modal 将此 data-target="#modal-default2" 作为目标,但是,您的循环包含模态主体,其 id id="modal-default2" >,它将根据循环的情况呈现模态。

因此,您可以做的是使用每个公司的 ID 为每个模式定义一个唯一的 ID modal-default{{company.id}}:

{% for company in companys %}
''' rest of codes '''
<button type="button" class="btn btn-warning margin-bottom" data-toggle="modal" data-target="#modal-default{{company.id}}">
delete
</button>
''' rest of codes '''

<div class="modal fade" id="modal-default{{company.id}}">
<div class="modal-dialog">
</div>
</div>
''' rest of codes '''
{% endfor %}

But this method is not effective if you have a lot of data, it will render lots of html codes.

另一种选择

使用 AJAX 和一个模式。

您的 html 将为:

{% for company in companys %}
<td>{{ company.name }}</td>
<td>{{ company.desc }}</td>

<button data-id="{{company.id}}" type="button" class="btn btn-warning margin-bottom delete-company" >
delete
</button> <!-- be aware of class 'delete-company' -->
{% endfor %}
{% csrf_token %}


<div class="modal fade" id="modal-default">
<div class="modal-dialog">
{% if company %} <!-- this company instance will come from AJAX -->
<form method="post" action="{% url 'system:company_delete' pk=company.pk %}">
{% csrf_token %}

<div class="modal-content">
<div class="modal-body">
<input type="text" name="name" maxlength="100" required="" id="id_name" value="{{ company.pk }}">
<input type="submit" class="btn btn-primary" value="Delete">
</div>
</div>
</form>
{% endif %}
</div>
</div>

AJAX

$(document).on('click','.delete-company',function(){
var id = $(this).data('id');

$.ajax({
url:'',
type:'POST',
data:{
'id':id,
'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val(),
},
success:function(data){
$('#modal-default .modal-dialog').html($('#modal-default .modal-dialog',data));
$('#modal-default').modal('show');
},
error:function(){
console.log('error')
},
});
});

您的 View 将是:

change your url from CompanyListView.as_view() to companyListView

def companyListView(request):
context = {}
companys = models.Company.objects.all()
if request.method == 'POST' and request.is_ajax():
ID = request.POST.get('id')
company = companys.get(id=ID) # So we send the company instance
context['company'] = company
context['companys'] = companys
return render(request,'template.html',context)

关于javascript - 使用 django 将值传递给引导模式形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50196148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com