我有一种情况,需要使用django在Postgres DB的varchar列中只允许特定字符。
它应该限制用户输入其他字符,即使他直接使用原始SQL查询进行编辑。有没有我可以在Django和Postgres中使用的验证器。
我发现这对在Django中使用很有帮助-如何使Django表单字段只包含字母数字字符但是,如果用户使用原始SQL查询修改数据,该怎么办?
在PostreSQL中,您可以向特定列添加CHECK
约束,例如
CREATE TABLE gender (val text);
此约束将只允许值f
和m
int字段val
ALTER TABLE gender ADD CONSTRAINT gender_vals CHECK (val IN ('f','m'));
测试
INSERT INTO gender VALUES ('f'),('m');
INSERT 0 2
INSERT INTO gender VALUES ('x');
ERROR: new row for relation "gender" violates check constraint "gender_vals"
DETAIL: Failing row contains (x).
或者,您已经可以创建具有此约束的表,上面链接的文档中对此进行了描述。
演示:db<>fiddle