簡體   English   中英

使用django將值傳遞給引導模式形式

[英]pass value to bootstrap modal form with django

當我對表單使用引導模式時,它僅顯示第一個值。

這是我的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 %}

其循環所有數據,單擊delete時將彈出確認表格。 但其返回的值相同。

但是如果沒有modal-bootstrap,它的工作也很好。

示例: 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模態將始終在模態內部返回相同的值,因為:
-模態具有此data-target="#modal-default2"作為目標,但是,您的循環包含模態主體,其id為id="modal-default2" ,將呈現與循環一樣多的模態。

因此,您可以使用每個公司modal-default{{company.id}} ID為每個模式定義唯一的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 %}

但是,如果您有大量數據,此方法將無效,它將呈現許多html代碼。

另外一個選項

帶有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')
        },
    });
});

您的views將是:

將您的網址從CompanyListView.as_view()更改為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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM