Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dúvida no Ex. 2 da Aula 7 - Arquivos estáticos e template base

Gente... estou tentando criar a relação:

Um produto tem uma categoria. Uma categoria tem uma lista de produtos.

Preciso que me ajudem como utilizar o models.ForeignKey.

Em Produto coloquei:

categoria = models.ForeignKey(Categoria, on_delete=models.CASCADE)

Mas colo coloco a lista de produtos em Categoria? E como faço para exibi-la na minha página usando {% for %}?

Abraço.

6 respostas
class Categoria(models.Model):
    nome = models.CharField(max_length=255, null=False)
    descricao = models.CharField(max_length=255, null=True)

class Produto(models.Model):
    categoria = models.ForeignKey('Categoria')
    nome = models.CharField(max_length=255, null=False)

o Django trata automaticamente de excluir todos os produtos quando voce excluir uma categoria.

Tudo bem, mas como faço para exibir no HTML todos os produtos de uma dada categoria? Essa é propriamente minha dúvida.

voce pode aplicar um filtro no model antes de enviar ele por parâmetro por exemplo:


categoria = Categoria.objects.get(id=1)

produtos= Produto.objects.get(categoria=categoria)

render(request, 'index.html', {'produtos' : produtos})

isso vai exibir todos os produtos da categoria 1

Tudo bem. Isso eu entendi, mas não sei fazer aparecer na página. Acho que estou errando aquele for:

{% for produto in produtos %}
<div class="prod">
   <div class="name">
      Nome do produto: {{ produto.nome }}
   </div>
</div>

É assim mesmo que devo fazer?

solução!

Bom primeiramente precisamos saber se está retornando alguma coisa, pois pode não ter conteúdo no sendo passado por parâmetro, sendo este o motivo de estar retornando em branco.

{% if produtos %}
    {% for produto in produtos %}
        <div class="prod">
            <div class="name">
                Nome do produto: {{produto.nome}}
             </div>
        </div>
    {% endfor %}
{% else %}
    <div class="prod"> Não existem produtos no filtro aplicado. :( </div>
{% endif %}