Django TemplateResponse изменяет URL-адрес файла

Начну с того, что URL-адреса моих файлов работают как положено. Когда я вывожу свой шаблон, я могу нажать на ссылку и загрузить правильный PDF.

С учетом этого я экспериментировал с попыткой динамического обновления или загрузки строк таблицы, чтобы улучшить пользовательский опыт. Для этого я использовал HTMX и старый добрый JS.

Я также создал функцию представления, которая позволяет мне отображать HTML фрагменты, которые затем вставляются в DOM. Эта функция выглядит следующим образом:

@login_required
def api_list_invoices(request):
    if (request.method == 'GET'):
        search_fields = ['pk','invoiceDate', 'vendorName', 'invoiceTotal', 'pdf']
        invoices = request.user.location.invoices.values(*search_fields).order_by('-invoiceDate') \
            .annotate(item_count=Count('items'))
        
        return TemplateResponse(request, 'invoice/invoice_table.html', {'invoices': invoices})

Это работает отлично, за исключением одного момента. Он полностью портит генерируемые ссылки для pdf. Получение invoice.pdf.url ничего не генерирует в выводимом HTML, а invoice.pdf будет генерировать неправильную ссылку. Точнее, она будет выглядеть как /invoice/api/pdfs/filename.pdf, а для корректности ссылка должна быть чем-то вроде /media/pdfs/filename.pdf. Интересно, что я НЕ заметил этого побочного эффекта при генерации URL аватара, поэтому я не знаю, почему это проблема для поля FileField. Буду признателен за любое понимание.

Кроме того, если кто-то может дать мне совет по защите MEDIA URL в целом, буду признателен. Сейчас для этого требуется логин, но я хочу убедиться, что пользователи могут просматривать только PDF файлы, которые принадлежат им, но я не уверен на 100%, как настроить MEDIA URL в URLS.py и проверить это. Не уверен, нужно ли мне делать что-то особенное.

Если кто-то может помочь мне разобраться в этом, я буду очень признателен.

Вернуться на верх