перенаправление в одном ajax почтовом запросе - PullRequest
0 голосов
/ 07 февраля 2020

Я столкнулся с действительно сложной проблемой, поднятой здесь

Чтобы подвести итог, я пытаюсь разрешить пользователям выбирать несколько экземпляров модели и использовать xhtml2pdf для визуализации только выбранная модель динамически. Чтобы сделать это, я использую javascript, чтобы отслеживать экземпляры, которые были нажаты пользователем, и сохранять их в массив. Когда пользователь нажал fini sh, он щелкнул бы по кнопке генерирования, которая возьмет массив и отправит его через запрос AJAX POST на мой взгляд, который отобразит pdf.

Вот некоторые из мой код:

мои взгляды

def BomPdf(request):
  if request.is_ajax():
    listy = request.POST.getlist('arr[]')
    trials = FormulationTrial.objects.filter(pk__in = listy)
    print(trials)
    print(listy)
    pk = request.POST.get('pk')
    data = {
         'product' : ProductFormulation.objects.filter(formulation_id = pk)[0],
         'trials' : FormulationTrial.objects.filter(pk__in = listy),
         'item' : TrialItems.objects.filter(formulationTrial__productFormulation__formulation_id__contains = pk),
         'itemdetails' : ItemDetails.objects.filter(itemdetail_id__in = TrialItems.objects.filter(formulationTrial__productFormulation__formulation_id__contains = pk).values_list('itemdetail', flat=True).distinct().order_by()),
     }
    pdf = render_to_pdf('rnd/bom_pdf.html', data)
    return HttpResponse(pdf , content_type='application/pdf')
  else:
    return JsonResponse({'status':'Fail', 'is_read':'not changed'})

мой javascript

   function ajaxsender(clicked_id){
    var b = clicked_id
    $.ajax({
     url : "{% url 'bom-pdf'%}",  
     method : "POST",
     async: false,
     data : {
       'csrfmiddlewaretoken' : "{{  csrf_token  }}",
        'arr[]' : arr , 
        'pk' : b },
     success : function(result) {
        console.log(arr)
        console.log(result)
        window.location.href = "{%url 'bom-pdf'%}";
        }

    })};

и мой html

{% for product in product %}
    <div id = {{product.formulation_id}} onClick="return ajaxsender(this.id);" class='btn w3-teal float-right' style="margin-right:3%">Generate BOM PDF</div>
    {% endfor %}

, как вы можете см. в моей командной строке после нажатия кнопки «Создать PDF» один раз:

    <QuerySet [<FormulationTrial: 10>, <FormulationTrial: 11>, <FormulationTrial: 12>, <FormulationTrial: 13>, <FormulationTrial: 14>]>
['10', '11', '12', '13', '14']
HTTP POST /project/rnd/bom/pdf/ 200 [0.37, 127.0.0.1:61834]
HTTP GET /project/rnd/bom/pdf/ 200 [0.01, 127.0.0.1:61834]

Похоже, что отправляется несколько запросов, что приводит к их пропуску в оператор else.

Я пытался удалить операторы if и else, но из-за нескольких отправляемых запросов он выдал ошибку, сообщив, что pk не является, поэтому мой вопрос в том, есть ли способ сделать перенаправление в одном запросе? если это невозможно, есть ли альтернативное решение для достижения моей цели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...