2016-01-04 51 views
1

模型定義如下:的Django模型:得到模型的主鍵剛剛創建

class UnitTab(models.Model): 
    unit_id = models.PositiveIntegerField(primary_key=True) 
    create_time = models.PositiveIntegerField() 
    update_time = models.PositiveIntegerField() 
    read_db_connection = 'game_center_admin_db' 
    write_db_connection = 'game_center_admin_db' 

    class Meta: 
     db_table = u'unit_tab' 

    def save(self, *args, **kwargs): 
     curr_time = int(time.time()) 
     if not self.create_time: 
      self.create_time = curr_time 
     self.update_time = curr_time 
     super(UnitTab, self).save(*args, **kwargs) 

    def __unicode__(self): 
     return u'unit_tab_%s' % (self.unit_id) 

,我只是拯救一個UnitTabUnitTab.objects.create()來創建新的對象。 unit_idauto_increment,所以我不必設置它。 但如果我使用"u = UnitTab.objects.create()",對象"u"我回來的是unit_id作爲無 - 雖然保存是成功的。那麼我怎麼能得到我剛剛保存/創建的UnitTabprimary key(unit_id)

編輯:我使用Django 1.6.11爲我的項目

編輯:我登錄的屬性,發現u.save()之後,unit_id是無。 create_time即可,實體保存成功。

編輯:從PositiveIntegerField更改爲AutoField後,unit_id字段在save()後自動分配。只是不確定爲什麼會這樣。

回答

2

是不是有什麼特別原因不想用models.AutoField代替?

unit_id = models.AutoField(primary_key=True) 
+0

我剛剛檢查並使用AutoField實際工作。只是想知道爲什麼會發生這種情況 –

+2

呃,因爲這就是AutoField所做的,而其他的領域則不然。 –

+0

但「刷新」適用於所有主鍵字段? @Daniel –

2

後您創建新的對象:

u = UnitTab.objects.create()

跟進,通過使用refresh_from_db()方法分貝刷新它的價值。

u.refresh_from_db()

你可以在這裏找到該信息:

https://docs.djangoproject.com/en/1.9/ref/models/instances/#refreshing-objects-from-database

編輯:

如果你在的Django 1.6,使用save()方法,你應該能夠訪問它是這樣的:

>>> b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.') 
>>> b2.id  # Returns None, because b doesn't have an ID yet. 
>>> b2.save() 
>>> b2.id  # Returns the ID of your new object. 

https://docs.djangoproject.com/en/1.6/ref/models/instances/#auto-incrementing-primary-keys

+0

很遺憾,我使用的是Django 1.6.11。 1.6中有類似的東西嗎? –

+0

@JunchaoGu我爲你更新了我的答案。只需使用'save()'方法即可。 – Kris

+0

正如接受的答案建議,使用AutoField只會訣竅 –