Невозможно заказать по времени в Джанго - PullRequest
3 голосов
/ 29 сентября 2019

У меня настоящая проблема, которую я не могу исправить. Я пытаюсь упорядочить транзакцию по времени, но все, что я делаю для заказа набора запросов .... ничего не работает.

вот моя модель

class Transaction(models.Model):
   collocDonneur=models.ForeignKey(Person,related_name="collocDonneur",on_delete=models.SET_NULL,null=True, blank=True)
    collocReceveur=models.ForeignKey(Person,related_name="collocReceveur",on_delete=models.SET_NULL,null=True, blank=True)
    point=models.IntegerField(null=False)
    raison=models.TextField(null=True,blank=True)
    date=models.DateTimeField(default=timezone.now)



    class Meta:
        verbose_name="Transaction"

и вот мое мнение:

def vote(request):
    person=Person.objects.all()
    transactions=Transaction.objects.all()
    transactions.order_by('date')
    return render(request,"liste.html",locals())

, даже если я заменил 'date' на '-date', ничего не получится, даже если я выполню reverse () для набора запросов ...

1 Ответ

5 голосов
/ 29 сентября 2019

Если вы звоните .order_by(..), вы делаете , а не сортируете данный набор запросов, вы создаете новый, который является копией старого, но там, где элементы упорядочены. Вы можете думать об этом аналогично строкам: вы не можете изменять строку, вы можете только сделать (измененную) копию строки. Строго говоря, вы можете изменить состояние QuerySet, но обычно это , а не хорошая идея, изменяя значения, удерживаемые QuerySet (и базовым .query), вполне вероятно,что вы нарушите какое-то предположение и, таким образом, создадите неверный запрос или откажетесь от механизма кэширования.

Таким образом, вы должны сконструировать набор запросов, например:

def vote(request):
    persons = Person.objects.all()
    transactions = Transaction.objects.<b>order_by('date')</b>
    return render(
        request,
        'liste.html',
        {'persons': persons, 'transactions': transaction}
    )

Extraпримечания :

  1. , поскольку person - это набор из Person с, лучше назвать его person<b>s</b>, а не person.
  2. пожалуйста, не используйте locals() это анти-шаблон, так как вы неясно, что вы передаете в контекст. Если позже вы захотите оптимизировать представление, например, вы можете удалить некоторую переменную по ошибке. Кроме того, вы легко можете передать слишком переменных, больше чем те, которые вам действительно нужны.
...