繁体   English   中英

Django datetime主键不限制唯一

[英]Django datetime primary key doesn't constrain unique

所以,这是我的模型:

class MyModel(models.Model):
    timestamp = models.DateTimeField(primary_key=True)
    fielda = models.TextField()

当我调用syncdb ,django不会向postgresql添加约束以使时间戳唯一,即使它为它提供了主键约束。

如果我改变时间戳只是 unique=True ,Django的创建唯一约束。 但是,如果我将unique=Trueprimary_key=True ,则django不会创建唯一约束。

我的信息:

  • django-south v1.8
  • Django 1.4
  • python 2.7
  • PostgreSQL 9.1

编辑:

如果我在两次不同的运行(不是同一过程)中两次保存了具有相同确切时间戳的模型,则模型不会升高,并且不会像应该的那样出现IntegrityError 但是,当它创建唯一约束且没有主键时,它将使用相同的代码。

编辑2:

这是当我从timestamp = models.DateTimeField(primary_key=True)在PostgreSQL中拥有CONSTRAINT "MyModel_pkey" PRIMARY KEY ("timestamp")时运行的代码

timestamp = datetime.datetime(2013, 7, 31, 0, 0, 0).replace(tzinfo=utc)
print timestamp # prints 2013-07-31 00:00:00+00:00
row = MyModel(timestamp=timestamp, fielda='test')
row.save()

连续运行两次时,不会引发IntegrityError 但是,使用unique=True不是 primary_key=True ,它的确会引发IntegrityError

也许文档中示例可以为您的问题带来一些启发

从技术上讲,主键约束只是唯一约束和非空约束的组合。 因此,以下两个表定义接受相同的数据:

 CREATE TABLE products ( product_no integer UNIQUE NOT NULL, name text, price numeric ); CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric ); 

[...]主键表示一列或一组列可以用作表中行的唯一标识符[...]添加主键将自动在表的列或组上创建唯一的btree索引主键中使用的列。 [...]

Ricola3D将我与解释我的问题的相同问题(已回答)联系在一起。

已回答的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM