问题标签 [django-constraints]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
149 浏览

django - 使用 ValidationError 和 Constraint(Django 2.2 中的新功能)时的最佳实践是什么?

编辑:我正在使用 PostgreSQL

我有一个具有 4 个电话号码字段的模型,并且我在模型级别运行 ValidationError 使用clean

这按预期工作正常。

在 Django 2.2 中,引入了模型约束,它在数据库级别创建约束。

最佳做法是:

  1. 将模型替换ValidationErrorConstraint
  2. 仅使用ValidationErrors(我不确定上述逻辑是否可以使用Constraint?)
  3. 保留两个?

如果答案是 1 或 3,我将如何ValidationError在 a 中创建与 my 相同的逻辑Constraint

0 投票
1 回答
443 浏览

django - 使用带有注解的 Django CheckConstraint

我有一个 Django 模型,其中每个实例都需要一个从三个字段派生的唯一标识符:

这会产生一个形式为 的标签[type][timestamp YEAR][number],它必须是唯一的,除非number为空。

我想我也许可以使用几个注释:

我覆盖了模型的管理器get_queryset以默认应用注释,然后尝试使用CheckConstraint

这失败了,因为它无法在名为 的实例上找到一个字段uid_cnt,但是我认为对象可以访问注释Q。它看起来像是CheckConstraint直接对模型进行查询,而不是使用管理器返回的查询集:

有没有办法将约束应用于注释?还是有更好的方法?

我真的很想在 db 层执行此操作。

谢谢。

0 投票
1 回答
496 浏览

django - 如何在 django 中使用 Uniqueconstraints 函数创建 unique_together 索引?

官方文档说:UniqueConstraint 提供了比 unique_together 更多的功能。unique_together 将来可能会被弃用。这是我的代码

当我迁移时,它会创建一个带有消息“-在模型 helloWorld 上创建约束 hello”的迁移。但它没有在数据库上创建索引。

0 投票
1 回答
213 浏览

django - django 具有相同外键的多个模型

我有 django 应用程序,用于跟踪各种客户的合同、位置和产品。合同、位置每个都使用 ForeignKey 引用客户端。

我还有一个产品将部署在一个位置,根据合同,为客户。我需要在产品中包含客户,因为参考用于保护该客户的记录。

确保永远不会创建包含所有 3 个模型的不同客户参考的产品的最佳方法是什么?我在想我可以使用 pre_save 信号,但我宁愿使用数据库约束,但我没有看到数据库约束来强制执行此操作。

0 投票
1 回答
82 浏览

sql - 在这种复杂情况下,如何解决 Django 缺少组合键的问题?

对于以下情况,我似乎无法弄清楚如何解决 Django 中缺少复合键的问题。我将使用 SQLite3 方言编写我想要的架构。

(对于了解 SQL 但不了解 sqlite 的人来说,下面唯一可能不熟悉的是 sqlite 的“WITHOUT ROWID”子句。默认情况下,sqlite 在表上添加一个隐藏的整数自动递增“rowid”列。使用“WITHOUT ROWID”命令将其关闭。)

表 AB 和 BC 具有复合键约束,可以使用代理键轻松解决,但表 ABC 具有复杂的键约束,不能直接在 Django 中实现。

这是一些测试数据

尝试让它工作 Django 的显而易见的第一步是使用代理键。隐藏的“rowid”列似乎是一个自然的选择,但这些列不能用作sqlite 中的外键,其中外键必须映射到声明的列。但是,有一种解决方法,“INTEGER PRIMARY KEY AUTOINCREMENT”是sqlite 中的一个特殊别名,它会导致命名列引用“rowid”。所以这就是我们将尝试的。

StackOverflow 上关于 Django 和复合键的类似问题提到使用 NOT NULL 和 UNIQUE 约束,因此我们也可以这样做:

如表所示,ABC 是欠约束的。这是相同的测试数据来证明它(在插入时使用 NULL 来表示自增列):

是在插入触发器之前使用的唯一选项来测试否则会漏掉的值吗?使用 Django 约束,我发现无法在约束检查中引用表 AB 和 BC。

0 投票
1 回答
118 浏览

django - 确保字段对于 Django 模型中的另一个字段是唯一的

我希望模型中的一个字段基于另一个字段是唯一的,反之亦然。

例如:

我希望两批货物不能有相同的供应商和相同的 external_id,但可以有相同的 external_id 和不同的供应商,或者相同的供应商和不同的 external_id。

我知道unique_together。但它使供应商只有一个 external_id。但是,我希望供应商拥有多个 external_id,而它们都是唯一的。

我可以在 save() 方法中检查这个约束,但我想要一个数据库约束,或者更聪明的东西。

0 投票
0 回答
41 浏览

django - Django Concat 不能在 AddConstraint 中使用

我有这样的约束

Makemigrations 运行良好,但是当我尝试实际迁移生成的迁移时,我得到IndexError: tuple index out of range

当我为生成的迁移运行 sqlmigrations 时,我收到以下错误TypeError: not enough arguments for format string

这是完整的错误消息:

django 在这里尝试格式化的字符串是:

元组是空的

我尝试了以下方法来排除简单的愚蠢:

  • 在注释中使用Concat(Value("/"), F("identifier"), Value("/")),这就像一个魅力
  • 替换Value("/")"/",正如预期的那样,这本身会产生问题
  • 用一个简单的值替换约束中的 concat,这也有效

所以看起来所有的拼图都是分开工作的!

如果重要的话,我正在使用 django 2.2.9

0 投票
1 回答
326 浏览

django - Django 单元测试约束

所以我在为 Check 和 Unique 约束编写单元测试时遇到了问题。以下是它们的定义:

并且单元测试断言失败:

和追溯:

0 投票
0 回答
43 浏览

django - 为什么我的模型字段超出了约束范围?

模型.py

当我尝试对其运行测试时,出现以下错误: NameError: name 'created_at' is not defined

我试图强制执行一个约束,即created_at错误的日期要么恰好是它的创建时间,要么在它创建时间的某个严格范围内。我希望在数据库级别执行它,因为我试图保护数据不仅来自表单输入(在这种情况下,我可以添加一个验证器或在字段上添加 editable=false),而且还来自任何其他尝试通过 ORM 将不正确的数据保存到数据库中。我还使用约束而不是验证器,因为我不想重写多个函数(save()、update() 等)。

系统信息:Python v3.9.0、Django v3.1.4

0 投票
1 回答
42 浏览

django - Django:如何将 null 视为等于唯一性约束的所有内容?

在标题中,我的意思是等于任何值,而不仅仅是其他空值。

假设我们有一个家庭,有家庭成员(人)和电子设备。有些电子设备是个人的,属于一个人,但有些不属于任何一个家庭成员,例如书房中的一台普通计算机。然后我们可以像这样对电子设备进行建模:

现在假设我们希望设备名称从家庭成员的角度来看是唯一的。一个家庭成员不应该有两个具有相同名称的设备可供他们使用。所以 name 和 owner 一起应该是唯一的,但也不应该有两个设备,一个 private 和一个 common(owner 为 null)具有相同的名称。

因此一个正常的UniqueConstraint

不会这样做,因为如果其中一个设备的所有者为空,它仍然允许两个设备具有相同的名称。仅约束名称字段:

也不会这样做,因为这不允许两个家庭成员将他们的私人设备命名相同,尽管我们确实希望允许这样做。

我目前的尝试是限制名称和所有者的唯一性,然后CheckConstraint如果已经存在具有该名称的通用设备(所有者为空),则使用不允许名称:

这是这里最好的方法还是有更好的解决方案?如果这是最好的解决方案:如何为此编写CheckConstraint