How to show the path of Filefields linked to a specific object in the template?

Asked

Viewed 31 times

0

Good afternoon!

I have a web application being made in Django, and I don’t know how to show in the template the path of all Filefields that are linked to an object.

I own two models. One for a common form and the other with a foreign key to link multiple files, being saved to the form (Request and Requestterms, respectively).

The point is that I don’t know how to show the path of ALL FILES that were saved in A SPECIFIC FORM.

For example: I will create two forms, one called José da Silva and the other Maria do Carmo. inserir a descrição da imagem aqui

Now I will add 2 files, one in each form, through my other class (Solicitacaodocumentos) that has a foreign key.

inserir a descrição da imagem aqui

inserir a descrição da imagem aqui

Let’s get to the problem. I don’t know how to filter and show in the template only the attached files, for example, José da Silva or Maria do Carmo. All I could do was list all the attachments to all the forms I have.

inserir a descrição da imagem aqui Models py.:

from django.db import models
from django.contrib.auth.models import User, Group

class Solicitacao(models.Model):

    class Meta:
        verbose_name_plural = 'Solicitações'

    TIPO = (
        ('', ''),
        ('Internação Clínica', 'Internação Clínica'),
        ('Internação Cirúrgica', 'Internação Cirúrgica'),
        ('Internação Oncológica', 'Internação Oncológica'),
        ('Internação Cardiológica', 'Internação Cardiológica'),
        ('Internação Pediátrica', 'Internação Pediátrica'),
        ('Internação em UTI Pediátrica', 'Internação em UTI Pediátrica'),
        ('Internação em UTI Geral', 'Internação em UTI Geral'),
        ('Internação em UCO', 'Internação em UCO'),
        ('Internação em UTI Pediátrica', 'Internação em UTI Pediátrica'),
        ('Internação em UADC', 'Internação UADC'),
    )
    date = models.DateTimeField(auto_now_add=True)
    nome = models.CharField(max_length=100)
    atendimento = models.CharField(max_length=100)
    carteira = models.CharField(max_length=100)
    tipo = models.CharField(max_length=200, null=True, choices=TIPO, default=None, blank=False)
    observacao = models.TextField(blank=True, null=True)
    definicoes = (
        ('Em análise', 'Em análise'),
        ('Internar', 'Internar'),
        ('Solicitar Transferência', 'Solicitar Transferência'),
    )

    definicao = models.CharField(max_length=200, null=True, choices=definicoes, default=None, blank=False)
    setor = models.ForeignKey(Group, on_delete=models.CASCADE, blank=True, null=True)
    
    def __str__(self):
        return str(self.nome)

def content_file_name(instance, filename):
    return '/'.join([instance.solicitacao.nome, instance.solicitacao.atendimento, filename])        

class SolicitacaoDocumentos(models.Model):

    class Meta:
        verbose_name_plural = 'Solicitações Documentos'

    solicitacao = models.ForeignKey(Solicitacao, default=None, on_delete=models.SET_DEFAULT, related_name='arquivo_chave')
    documentos = models.FileField(upload_to=content_file_name, blank=True, null=True)

    def __str__(self):
        return str(self.solicitacao.nome)

Urls.py

path('pav/<id>/', views.upload, name='upload'),

Views.py

def upload(request, id):

    arquivos = SolicitacaoDocumentos.objects.all()
    
    return render(request, 'upload.html', {
        'arquivos':arquivos
    })

Template:

{% for p in arquivos %}
<table>
    <thead>
        <tr>
            <th>
                {{ p.documentos }}
            </th>
        </tr>
    </thead>
</table>


{% endfor %}

1 answer

0

Good afternoon.

Man if you want to filter the 'Requestitutes' that is associated with another model in the case with 'Request', just use the filter as follows.

In this view here:

Instead of putting the all.

def upload(request, id):

arquivos = SolicitacaoDocumentos.objects.all()

return render(request, 'upload.html', {
    'arquivos':arquivos
})

You will do it this way using the filter

for import of get_object_or_404

from django.shortcuts import render, get_object_or_404

def upload(request, id):
   solicitacao = get_object_or_404(Solicitacao, id=id)
   arquivos = SolicitacaoDocumentos.objects.filter(solicitacao = solicitacao)

return render(request, 'upload.html', {
    'arquivos':arquivos
})

Hence it will filter all 'Requestterms' that is related to 'Request', and put into context.

I hope I helped, I’m up for anything. I hope you’re right too.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.