Django& Postgresql:覆盖语言环境进行排序?

时间:2016-08-25 08:55:12

标签: django postgresql sorting locale

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

mything=>\l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 mything   | postgres | UTF8     | nn_NO.UTF-8 | nn_NO.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | me=CTc/postgres

我们说有一张表IEnumerable。 我希望MyTable根据en_US规则进行排序,而不是nn_NO。是否可以从Python / Django覆盖排序区域设置,还是必须重新创建整个数据库?

settings.py包含

MyTable.objects.order_by('name')

1 个答案:

答案 0 :(得分:0)

RadosławGanczarek的评论指出正确答案:

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