1
resposta

Ordenação por data

Boa tarde,

Minhas receitas não estão ficando ordenadas por data, podem me ajudar?

views.py/receitas

from receitas.models import Receita
from django.shortcuts import get_object_or_404, render, get_list_or_404
from django.http import HttpResponse

def index(request):
    receitas = Receita.objects.order_by('-date_receita').filter(publicada=True)

    dados = {
        'receitas' : receitas
    }

    return render(request, 'index.html', dados)

def receita(request, receita_id):
    receita = get_object_or_404(Receita, pk=receita_id)

    receita_a_exibir = {
        'receita':receita
    }

    return render(request, 'receita.html', receita_a_exibir)

models.py/receitas

from django.db import models
from datetime import datetime
from pessoas.models import Pessoa


class Receita(models.Model):
    pessoa = models.ForeignKey(Pessoa, on_delete=models.CASCADE)
    nome_receita = models.CharField(max_length=200)
    ingredientes = models.TextField()
    modo_preparo = models.TextField()
    tempo_preparo = models.IntegerField()
    rendimento = models.TextField(max_length=100)
    categoria = models.CharField(max_length=100)
    date_receita = models.DateField(default=datetime.now, blank=True)
    publicada = models. BooleanField(default=False)
1 resposta

Olá Gustavo, tudo bem com você?

Peço desculpas pela demora no retorno.

Analisando os códigos apresentado, no arquivo receitas/models.py notei que existe uma diferença na declaração da variável date_receita, ela foi declarada como resultado da função DateField, já a durante a aula fora utilizado a função DateTimeField, abaixo uma explicação breve sobre a diferença entre elas.

  • DateField: Cria um campo que contém a data.
  • DateTimeField: Cria um campo que contém a data e a hora.

Como foi feito o uso da primeira opção, seu projeto irá salvar apenas a data, assim será notado uma diferença na ordenação das receitas por data apenas quando uma receita ferem criadas com o intervalo de um dia, creio que os teste realizados por você aconteceu em um intervalo menor de tempo, assim as datas serão as mesmas.

Recomendo que troque a declaração da variável date_receita no arquivo receitas/models.py , fazendo o uso da função DateTimeField, conforme apresentado abaixo.

date_receita = models.DateTimeField(default=datetime.now, blank=True)

Após realizar a troca, basta salvar o arquivo receitas/models.py, e iniciar o servidor.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!