问题标签 [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 回答
67 浏览

django - 两个字段之间的唯一约束,无论顺序如何

该程序有一个表示两个用户之间关系的表:

问题出在约束中,到目前为止我定义的约束是:

第一个检查之间的唯一约束,第二个(user_from, user_to)检查user_fromisuser_to与正在创建。user_from=user1user_to=user2user_from=user2user_to=user1

是否存在某种形式来添加此约束?或者解决方案是仅在应用程序层创建约束?例如覆盖保存方法并检查此约束。

0 投票
0 回答
33 浏览

django - Django 约束:允许一个字段与另一个字段只有一个组合,同时仍保留历史数据

我正在尝试在我的 Offer 表上创建一个约束,该表有一个 offer_id(字符字段)和一个 product_id(外键),其中一个 offer_id 只能与 1 个产品组合。不允许将 offer_id 与多个产品组合。

我不能让 offer_id 简单地唯一,因为该表使用历史数据。如何为我的 django 模型进行约束,以确保每个 offer_id 最多链接到 1 个产品,一个产品可以有多个 offer_id,并且由于历史数据,一个 offer_id 和 product_id 可以多次出现。

报价模型的简单概述:

0 投票
1 回答
45 浏览

django - 如何在 Django 中实现广义唯一性 DB 约束 (A,B) 和 (B,A)?

我想在使用字段 one='a' 和 two='b' 创建对象之前检查数据库,如果数据库已经有字段 one='b' 和 two=' 的行,则不创建(抛出异常) a'(倒序)。即保证(一,二)和(二,一)中只有一个存在。这就像一个广义的唯一性约束。

我正在使用 Django 3.2。

我看到CheckConstraint支持 boolean Expression,一种类型的表达式是聚合。所以我可以想象测试 (one, two) 和 (two, one) 的行数最多为 1。但是,这听起来很昂贵,而且我也没有看到如何在 CheckConstraint 中使用 Count 的示例.

或者,我可以实现一个发出查询的pre_save信号。这似乎更好,因为我手头有数据来形成查询。但是,我看不到如何使用 pre_save 信号来防止保存。它有我可以使用的返回值吗?我在文档中没有看到。

编辑:第三种选择可能会覆盖save进行检查。

我也对其他想法持开放态度。

0 投票
1 回答
55 浏览

django - 使用继承类中的字段的 Django 模型约束条件 - 可能吗?

我想使用父类中的字段作为子类中的约束条件。

模型.py

当我尝试迁移时,我在终端中看到此错误:

很明显,为什么我会看到此错误(is_public字段位于ParentClass)。我的问题是,那是不可能的,还是我可以重构一些东西?

我的最终目标是什么?

不让实例ChildClass is_pulic更改为Trueif the priceis null。我想在数据库级别强制执行此操作。

有没有办法,如果有,需要改变什么?

0 投票
1 回答
15 浏览

python - 约束 unique_together 可能与 dajngo 类中的 unique_field 冲突

我想知道使用约束unique_together以及unique=true属于unique_together.

我无法删除unique=true我的字段的参数,因为它在另一个模型中用作外键。

如您所见,目标是使字段的组合fiscal_number独一无二email

0 投票
1 回答
41 浏览

django - Django CheckConstraints 检查 start_date 是否大于或等于今天

像上面的代码一样,我想添加 CheckConstraint 来检查 start_date 是否大于或等于今天。
但是,在 makemigration 和 migrate 之后,发生了错误。

functions or expression 'CURRENT_TIME' cannot be userd in check clause

我尝试了两种方法。

第一的。

但是,迁移文件具有 timezone.now() 方法的结果,例如 datetime(2022, 01, 06, tzinfo=<UTC>)

第二。

function cannot be resolved当我尝试迁移时,此试验会出错。

如何查看 start_date 和今天?


提前感谢并为我的英语技能道歉。

0 投票
1 回答
31 浏览

django - Django 多对多约束验证

我正在尝试创建一个约束来检查两个字段是否都具有虚假值。这些字段之一是布尔值,另一个是 m2m,如下所示:

这让我'constraints' refers to a ManyToManyField 'target_groups', but ManyToManyFields are not permitted in 'constraints'.

无论如何我可以在创建/更新时检查是否public为空Truetarget_groups我检查了这个这个

例如,我尝试对save方法进行验证,如下所示:

但是条件self.target_groups总是假的,我认为这是有道理的,因为对象还没有添加到集合中,但是我如何验证从请求中传入的数据呢?我使用 DRF,我已经可以在序列化程序上验证它,但是管理员也可以通过 Django admin 添加它,所以我试图在模型级别验证它。

我很欣赏任何见解。