【问题标题】:Django Postgres Case Insensitive Textfield and citextDjango Postgres 不区分大小写的文本字段和 citext
【发布时间】:2016-02-04 20:54:19
【问题描述】:

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

据我了解,django 不能开箱即用地使用这个扩展,所以我做了一个自定义字段:

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

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

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

 description       | citext                   | not null

但是当我进行查询时,django 会将查询翻译为:

SELECT * FROM .... WHERE mytable.description::text LIKE 'TEST%'

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

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

注意:最重要的是,我希望我的索引表现得像不区分大小写的索引。

【问题讨论】:

  • 你能分享你的查询集过滤器吗?

标签: django postgresql python-3.x


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2015-10-21
    • 2020-08-29
    • 2020-02-18
    • 2014-03-14
    • 2015-07-05
    • 2011-12-08
    相关资源
    最近更新 更多