Django Postgres Case Insensitive Textfield和citext

时间:2015-11-04 11:22:33

标签: django postgresql python-3.x

对于我的Django应用程序,我使用PostgreSQL(9.3),我想在我的数据库中使用不区分大小写的文本。为此,Popstgres有一个名为“citext”的“新”扩展名。

据我了解,django无法使用此扩展程序,因此我创建了一个自定义字段:

http://crp.com/ajax.php?prc=diagnoses&name=ƒsƒU&diagres=0-0,1-3,2-2,3-3,4-3,5-2

我使用CharField作为基类,因为我仍然希望能够设置最大长度的所有django特权以及随附的验证器。

数据库是正确创建的,我最终得到了citext-tables:

class RsCharField(models.CharField):
    ...
    def db_type(self, connection):
        return 'citext'

但是当我进行查询时,django会将查询转换为:

 description       | citext                   | not null

仍然区分大小写。当我手动选择并删除:: text时,它的工作原理不区分大小。

问题:我做错了什么,在进行查询时,如何让我的CharFields在django中表现得像不区分大小写?

注意:最重要的是,我希望我的索引的行为类似于不区分大小写的索引。

1 个答案:

答案 0 :(得分:1)

使用django.contrib.postgres.fields.citext中提供的类 https://docs.djangoproject.com/pt-br/1.11/_modules/django/contrib/postgres/fields/citext/