我有带场地wine 吧的FOO模型.条形域应该是唯一的,但允许其中有空值,这意味着如果条形域是null
,我希望允许多个记录,但如果不是null
,则值必须是唯一的.
这是我的模型:
class Foo(models.Model):
name = models.CharField(max_length=40)
bar = models.CharField(max_length=40, unique=True, blank=True, null=True, default=None)
下面是该表的对应SQL:
CREATE TABLE appl_foo
(
id serial NOT NULL,
"name" character varying(40) NOT NULL,
bar character varying(40),
CONSTRAINT appl_foo_pkey PRIMARY KEY (id),
CONSTRAINT appl_foo_bar_key UNIQUE (bar)
)
当使用管理界面创建超过1个foo对象,其中bar为null时,它会给我一个错误:"具有此bar的foo已经存在."
然而,当我插入数据库(PostgreSQL)时:
insert into appl_foo ("name", bar) values ('test1', null)
insert into appl_foo ("name", bar) values ('test2', null)
这很管用,很好,它允许我插入多条记录,条为空,所以数据库允许我做我想做的事情,这只是Django模型出了问题.有什么 idea 吗?
编辑
就DB而言,解决方案的可移植性不是问题,我们对Postgres很满意. 我try 了对一个可调用函数进行唯一的设置,即我的函数为特定值bar返回True/False,它没有给出任何错误,但是看起来一点效果都没有.
到目前为止,我已经从bar属性中删除了唯一说明符,并在应用程序中处理了bar唯一性,但是仍然在寻找更优雅的解决方案.有什么建议吗?