python - Django 按日期排序(天)

标签 python django sorting

我想先按天对模型进行排序,然后再按分数对模型进行排序,这意味着我希望看到每天得分最高的文章。

class Article(models.Model):

date_modified = models.DateTimeField(blank=True, null=True)
score = models.DecimalField(max_digits=5, decimal_places=3, blank=True, null=True)

这个答案Django Datetime Field Query - Order by Time/Hour建议我将 '__day' 与我的 date_modified 一起使用,如:

Article.objects.filter().order_by('-date_modified__day', '-score')
FieldError: Cannot resolve keyword 'day' into field. Join on 'date_modified' not permitted.

但是我得到了与帖子中相同的错误,所以我什至不确定它应该以这种方式工作。

我找到了其他答案 django order by date in datetime / extract date from datetime使用 .extra:

Article.objects.filter().extra(select={"day_mod": "strftime('%d', date_modified)"}, order_by=['-day_mod', '-score'])

这适用于没有其他条件的过滤,但如果我在过滤器上应用条件,例如类别:

Article.objects.filter(category = 'Art').extra(select={'day_mod': "strftime('%d', date_modified)"}, order_by=['-day_mod', '-score'])

我收到这个错误:

File "/home/mykolas/anaconda2/lib/python2.7/site-packages/IPython/core/formatters.py", line 699, in __call__
printer.pretty(obj)

File "/home/mykolas/anaconda2/lib/python2.7/site-packages/IPython/lib/pretty.py", line 383, in pretty
return _default_pprint(obj, self, cycle)

File "/home/mykolas/anaconda2/lib/python2.7/site-packages/IPython/lib/pretty.py", line 503, in _default_pprint
_repr_pprint(obj, p, cycle)

File "/home/mykolas/anaconda2/lib/python2.7/site-packages/IPython/lib/pretty.py", line 694, in _repr_pprint
output = repr(obj)

File "/home/mykolas/lenv/lib/python2.7/site-packages/django/db/models/query.py", line 234, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])

File "/home/mykolas/lenv/lib/python2.7/site-packages/django/db/models/query.py", line 258, in __iter__
self._fetch_all()

File "/home/mykolas/lenv/lib/python2.7/site-packages/django/db/models/query.py", line 1074, in _fetch_all
self._result_cache = list(self.iterator())

File "/home/mykolas/lenv/lib/python2.7/site-packages/django/db/models/query.py", line 52, in __iter__
results = compiler.execute_sql()

File "/home/mykolas/lenv/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 848, in execute_sql
cursor.execute(sql, params)

File "/home/mykolas/lenv/lib/python2.7/site-packages/django/db/backends/utils.py", line 83, in execute
sql = self.db.ops.last_executed_query(self.cursor, sql, params)

File "/home/mykolas/lenv/lib/python2.7/site-packages/django/db/backends/sqlite3/operations.py", line 146, in last_executed_query
return sql % params

TypeError: %d format: a number is required, not unicode

真的不知道这里发生了什么,将不胜感激。

最佳答案

from django.db.models import DateTimeField
from django.db.models.functions import Trunc

Article.objects.order_by(
    Trunc('date_modified', 'date', output_field=DateTimeField()).desc(),
    '-score')

关于python - Django 按日期排序(天),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38705451/

相关文章:

python - 在 Django 模板中包含图像文件显示断开的链接?

python - 在带有 tinymce 的 Django admin 中使用富文本编辑器

algorithm - Scala:如何通过分组(或分箱)获取 Iterable 的前 N ​​个元素

python - 如何在 Django 的表中列出变长元组?

python - 如何检查列表中的单词是否至少包含一定数量的单个字母

PHP 可执行文件将在命令行中运行,但不能在浏览器中运行

javascript - 如何使用 Selenium 滚动谷歌地图搜索显示的结果

python - 外键中所有字段的django values_list

java - 在 Java 中按值对 Map 进行排序

python - 不使用 list.sort( ) 对列表进行从小到大排序