【问题标题】:Django & Postgresql: Override locale for sorting?Django 和 Postgresql:覆盖区域设置以进行排序?
【发布时间】:2017-01-01 14:54:12
【问题描述】:

我有一个带有 Postgresql 数据库的简单 Django 应用程序。数据库配置了 nn_NO.UTF-8 语言环境。

神话=>\l 数据库列表 姓名 |所有者 |编码 |整理 |类型 |访问权限 ------------+----------+----------+-------------+-- -----------+----------- 神话|后勤 | UTF8 | nn_NO.UTF-8 | nn_NO.UTF-8 | =Tc/postgres + | | | | | postgres=CTc/postgres+ | | | | |我=CTc/postgres

假设有一张桌子MyTable。 我希望MyTable.objects.order_by('name') 根据 en_US 规则排序,而不是 nn_NO。是否可以从 Python/Django 覆盖排序区域设置,还是必须重新创建整个数据库?

settings.py 包含

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

【问题讨论】:

标签: django postgresql sorting locale


【解决方案1】:

Radosław Ganczarek 的评论指出了正确的答案:

from django.db.models import Func, F
name_en = Func(
    'name',
    function='en_US',
    template='(%(expressions)s) COLLATE "%(function)s"')
sorted_things = MyTable.objects.order_by(name_en)

https://docs.djangoproject.com/en/1.9/ref/models/expressions/#func-expressions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    相关资源
    最近更新 更多