2014-04-12 244 views
1

我有一個基本問題,我認爲答案應該是顯而易見的,但我自己找不到它。這是我的模型:Django:覆蓋模型的ID

class Topic(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    subject = models.ForeignKey(Subject) 
    name = models.TextField(blank=True, null=True, verbose_name=u'') 
    date = models.DateTimeField(auto_now_add=True) 

比方說,有這樣的ID的3個主題對象實例:

當我delete()第三實例,並且嘗試創建一個新的,Django爲最後一個實例提供了一個「4」ID,但我想測量所有當前主題的ID,並給出新的對象ID highest present ID +1,例如:

主題--- ID

Topic1--1

Topic2--2

Topic3--3

當我刪除Topic3(ID = 3),並創建新的主題Topic4,我想的ID因爲它會是3.

它可以通過Django shell來完成,我只是不確定應該如何覆蓋模型的ID創建方法。

當我創建Topic我的用戶(user = request.user),並根據目前的主題創建它當前登錄(subject = slug

+0

你爲什麼要這麼做?只需讓數據庫管理ID即可。是否有差距並不重要。 –

+0

這是我的應用程序的業務邏輯所必需的。我使用Jquery和Ajax動態創建對象,像(http://example.com/app/edit/topic/ )這樣的鏈接應該是動態的--PK + 1等。 – Eimantas

+0

使用'PK'的事實在你的URL中,並不以任何方式要求它們是連續的,在你的應用程序中也不存在AJAX。 –

回答

1

您的應用程序邏輯肯定不需要這個。假設您可以解析模板的HTML,增加您找到的值並希望使用此ID在數據庫中查找某些內容,您犯了一個錯誤。與其試圖微觀管理數據庫來解決這個問題,讓我們回頭看看你的決定,並考慮替代方案。

當你動態地創建一個話題,做這種方式:

  1. 做一個AJAX調用新題目的信息的服務器。
  2. 有一個視圖處理AJAX調用並創建視圖,並用它新建立的pk進行響應。
  3. 使用您回來的pk動態生成一個URL,推測是JSON
+1

謝謝,這聽起來合乎邏輯!我會看看它是如何發生並更新問題狀態。 – Eimantas

+0

這種方法可以正常工作,再次感謝您的幫助。我想有時候最好不要過度複雜一切。 – Eimantas