簡體   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