【问题标题】:How do I introduce a constraint in django table where values from 2 columns will be unique in a table and other rows can have duplicate pairs?如何在 django 表中引入约束,其中 2 列的值在表中是唯一的,而其他行可以有重复的对?
【发布时间】:2021-09-16 22:49:04
【问题描述】:

如何在 Django 表中引入一个约束,其中一个列的 2 个值在一个表中是唯一的,而其他行可以有重复的对?

喜欢

a True
a False
a False
a False
a True
b True
a False
a False
a False
b False
b False

但不是

a True
a True
a False
a False
a False
b True
b True
a False
a False
a False
b False
b False

所以,我只希望左列的一个值为 True。

实际考虑一下,将第一列视为名称,将第二列视为默认值。

我希望名称列中只有一个值具有default = True,但它可以具有多个default = False 实例。

【问题讨论】:

    标签: python django database postgresql django-rest-framework


    【解决方案1】:

    我不知道我们是否真的可以通过添加约束来使用模型来做到这一点。但我想我想出了一个解决方案。

    我不知道您使用 Django 做什么,但如果您正在构建 Web 应用程序并且正在使用表单,请在表单提交时调用 API 并将数据发布到后端。现在,这些数据不应该直接存储在数据库中。首先,运行一个验证函数来检查该特定数据是否会违反您的规则。如果是,则发送错误作为响应。如果没有,请保存数据。

    【讨论】:

    • 你能给我一个验证函数的例子吗?是的,我正在将它用于 Web 应用程序。
    【解决方案2】:

    我不确定您所说的“一个默认值=True 和多个默认值=False”是什么意思,一列只有一个默认值。但是我认为您只是将默认值与值混淆了。你可以拥有。你在找什么partial unique index。什么实际的表定义我将只创建一个示例表。见demo here

    create table some_table( id integer generated always as identity 
                                        primary key
                           , col_name   text
                           , is_active  boolean default true
                           ); 
    -- Now create the partial unique index
    create unique index some_table_1_active 
           on some_table (col_name)
    where is_active; 
    

    对不起,我不确定你需要如何在你的 obsurfation 层 (Django) 中编写这个。我猜如果有必要,您可以使用原始 SQL (?) 创建索引。

    【讨论】:

      猜你喜欢
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 2020-05-10
      相关资源
      最近更新 更多