关于python:django查询,使用.order_by()和.latest()的Django查询

Django Query using .order_by() and .latest()

我有一个模型:

1
2
3
4
5
class MyModel(models.Model):
   creation_date = models.DateTimeField(auto_now_add = True, editable=False)

   class Meta:
      get_latest_by = 'creation_date'

我的视图中有一个查询执行了以下操作:

1
instances = MyModel.objects.all().order_by('creation_date')

后来,我想要以东十一〔0〕号,但它没有给我正确的例子,事实上,它给了我第一个例子。只有当我将order设置为-creation_date或从查询中实际删除了order时,.latest()才给了我正确的实例。当我使用python manage.py shell而不是在视图中手动测试时,也会发生这种情况。

所以我现在所做的是在模型的meta中,我列出了order_by = ['creation_date'],但没有在查询中使用它,这是可行的。

我希望.latest()总是基于(日期)(时间)字段返回最近的实例。有人能告诉我,在查询中使用order_by时,.latest()的行为是否正确?


I would have expected .latest() to always return the most recent instance based on a (date)(time) field.

文件说

BLCK1/

这意味着当你着火的时候,你会得到一个基于日期/时间场的最新的实例。当我用样本数据测试你的代码时,它是独立的。

And then later I wanted instances.latest(), but it would not give me the correct instance, in fact it gave me the first instance.

你误解了我的工作方式。当传说中呼唤它时The last instance in the table.当一个叫什么名字时,将返回第一个对象。您的任意组合由EDOCX1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,在这片土地上,任何一块地上的第一块地都必须归还。这是偶然的,是桌子上的老石头。

要更好地理解,一个方法就是看一下为latest准备的火灾。

第1项:

1
2
3
from django.db import connection
MyModel.objects.latest()
print connection.queries[-1]['sql']

This prints:

ZZU1

注:creation_date DESCLIMIT条款。前体感谢get_latest_byWhereas the latter is the contribution of latest

Now,case 2:

1
2
MyModel.objects.order_by('creation_date').latest()
print connection.queries[-1]['sql']

印刷

1
2
SELECT"app_mymodel"."id","app_mymodel"."creation_date" FROM
"app_mymodel" ORDER BY"app_mymodel"."creation_date" ASC LIMIT 1

注:该命令已改为creation_date ASC。这是EDOCX1&12解释的结果。后期的短暂的爱德华第1〔2〕

另见第3项:具体说明field_name的地方。

1
2
MyModel.objects.latest('id')
print connection.queries[-1]['sql']

展示

1
2
SELECT"app_mymodel"."id","app_mymodel"."creation_date" FROM"app_mymodel"
ORDER BY"app_mymodel"."id" DESC LIMIT 1


我猜这是一个知名的错误,在1.3之后被固定下来。


为我工作

1
latestsetuplist = SetupTemplate.objects.order_by('-creationTime')[:10][::1]