无法按时间在Django中订购

问题描述 投票:2回答:1

我有一个无法解决的实际问题。我正在尝试按时间订购交易,但是我为订购queryset所做的一切。...无济于事。

这是我的模特

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',也无济于事,即使我在queryset上执行了reverse()...

python django django-queryset
1个回答
1
投票

如果调用.order_by(..),则对给定的查询集进行排序,您将构造一个新的查询集,它是旧查询集的副本,但其中的项已排序。您可以用类似于字符串的方式来考虑这些:您不能更改字符串,只能复制(修改)字符串。严格来说,您可以更改QuerySet的状态,但这通常不是一个好主意,通过更改QuerySet(以及基础.query)的值,您很有可能将打破某些假设,从而构造无效的查询,或破坏缓存机制。因此,您应该构建一个查询集,如:

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

额外注释

    因为personPerson的集合,所以最好将其命名为persons,而不是
  1. person请不要使用locals()这是一个反模式,因为您不清楚要传递给上下文的内容。例如,如果以后打算优化视图,则可能会误删除一些变量。您还可以轻松地开始传递
  2. too
  3. 比实际需要的更多的变量。]​​>
© www.soinside.com 2019 - 2024. All rights reserved.