所以,这是我的模型:
class MyModel(models.Model):
timestamp = models.DateTimeField(primary_key=True)
fielda = models.TextField()
当我调用时syncdb
,django 不会postgresql
为时间戳添加唯一的约束,即使它为它提供了主键约束。
如果我将 timestamp 更改为just unique=True
,django 会创建唯一约束。但是,如果我结合unique=True
and primary_key=True
,django 不会创建唯一约束。
我的资料:
- django-south v1.8
- django 1.4
- 蟒蛇2.7
- PostgreSQL 9.1
编辑:
如果我在两次不同的运行(不是相同的过程)中两次保存具有相同确切时间戳的模型,它不会引发并且IntegrityError
应该如此。但是当它创建唯一约束并且没有主键时,它使用相同的代码。
编辑2:
这是我CONSTRAINT "MyModel_pkey" PRIMARY KEY ("timestamp")
在 postgresql中运行的代码timestamp = models.DateTimeField(primary_key=True)
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
and not primary_key=True
时,它确实会引发IntegrityError
.