考虑以下情况:

假设我的应用程序允许用户创建他们所在的州/省

在美国,用户可以创建一个名为"德克萨斯"的州.如果这个应用

但重要的是,该系统应防止在以下情况下创建"德克萨斯州"

如果模型如下所示:

class State(models.Model):
    name = models.CharField(max_length=50, unique=True)

这种独特性在postgres中是区分大小写的;也就是说,博士后

在这种情况下可以做些什么来防止这种行为.怎么做

现在,我正在做以下事情,以防止案件的产生-

class CreateStateForm(forms.ModelForm):
    def clean_name(self):
        name = self.cleaned_data['name']
        try:
            State.objects.get(name__iexact=name)
        except ObjectDoesNotExist:
            return name
        raise forms.ValidationError('State already exists.')

    class Meta:
        model = State

在很多情况下,我必须做这个判断,我不想在任何地方都写类似的iexact判断.

只是想知道是否有一个内置的或

推荐答案

可以定义从models.CharField派生的自定义模型字段.

这里有自定义字段文档

查看http://code.djangoproject.com/browser/django/trunk/django/db/models/fields/files.py,了解如何通过子类化现有字段来创建自定义字段的示例.

您可以使用PostgreSQL https://www.postgresql.org/docs/current/static/citext.html的citext模块

如果使用此模块,自定义字段可以将"db_type"定义为PostgreSQL数据库的CITEXT.

这将导致对自定义字段中的唯一值进行不区分大小写的比较.

Postgresql相关问答推荐

从子查询中的排序结果中获取前X行

PostgreSQL:`row_alias为null`且`row_alias不是null`返回值不一致

如何在Common Lisp中使用Postmodern在表更改时获得通知?

使用pg_repack从PostgreSQL中的表中删除OID

在rust中,有什么方法可以从sqlx::query_with中返回rows_infected以及行本身?

无法在kubernetes中设置postgres复制

如何在typeorm和嵌套js中将运行时变量设置为postgresql

我应该 Select 哪种数据类型?

Postgresql:创建默认表空间的视图和使用?

PostgreSQL 返回准确或最接近查询日期的日期

knex: Select 特定日期范围内的行

如何让 Rails 使用 SSL 连接到 PostgreSQL?

从 Postgres 数据库中删除所有函数

Select 空字段

NOT LIKE 带有 NULL 值的行为

在 postgresql 中,如何在 jsonb 键上返回布尔值而不是字符串?

用于更改 postgresql 用户密码的 bash 脚本

SqlAlchemy:多列的不同计数

使用 Postgres 在 Rust 的 Diesel 库中添加时间戳

使用python将数据从csv复制到postgresql