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

Я пытаюсь создать функцию, в которой пользователь может выбрать элементы, которые он хочет отобразить в pdf. Чтобы сделать это, я сначала сделал некоторый код для хранения PK элементов, выбранных пользователем.

(javascript)

var arr = []
function selector(clicked_id){
    var a = clicked_id
    if (arr.includes(a) === false){
    arr.push(a)
    document.getElementById(a).classList.add('bg-light');
    } else {
    const index = arr.indexOf(a)
    arr.splice(index, 1)
    document.getElementById(a).classList.remove('bg-light')
    }
    console.log(arr)
    console.log(a)

    };

(html)

        {%for trial in trials %}
    <td style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000" align="center" valign=middle bgcolor="#CCFFFF" id={{trial.trial_id}} onClick="return selector(this.id);"><b><font face="Arial" size=1>
    </td>
    {%endfor%}

Таким образом, нажатие на ячейку таблицы изменит цвет ячейки и сохранить ПК в массив. Когда пользователь нажимает кнопку, чтобы сгенерировать pdf, я передам список pk в функцию ajax следующим образом:

function ajaxsender(clicked_id){
$.ajax({
 url : "{% url 'bom-pdf'%}",  
 method : "POST",
 data : {
   'csrfmiddlewaretoken' : "{{  csrf_token  }}",
    'arr' : arr
          },
 success : function(result) {
    console.log(arr)
    }

})};

(HTML)

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

Это представление, обрабатывающее запросы:

def BomPdf(request):
  if request.method=='POST' and request.is_ajax():
    print('ajax requessssst')
    listy = request.POST.getlist('arr')
    print(type(listy))
    #some code here to be able to filter out my data based on the queryset passed in#
     pk = #
     data = {
         'product' : ProductFormulation.objects.filter(formulation_id = pk)[0],
     }
     pdf = render_to_pdf('rnd/bom_pdf.html', data)
     return HttpResponse(pdf, content_type='application/pdf')

Хитрость в том, что я использую xhtml2pdf для рендеринга в pdf, поэтому существует необходимость перенастроить httpresponse вместо типичного jsonresponse, который обработка вида ajax подойдет. Из-за этого я сталкиваюсь с 405 error, который кажется чем-то связанным с ошибкой cors. Поэтому у меня есть 2 вопроса:

  1. как сделать запрос, используя ajax, и передать его в контекст ?
  2. как применить концепцию в моем случае?
...