2014-04-12 174 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