Django:覆盖模型的ID

1 投票
1 回答
641 浏览
提问于 2025-04-18 02:27

我有一个基本的问题,虽然答案应该很明显,但我自己找不到。这是我的模型:

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分别是:

1
2
3

当我用delete()删除第三个对象后,再创建一个新的对象时,Django会给这个新对象一个ID为'4',但我希望能查看所有现有主题的ID,然后给新对象一个ID,等于最高现有ID + 1。比如:

主题---ID

主题1--1

主题2--2

主题3--3

当我删除主题3(ID=3)并创建新的主题主题4时,我希望它的ID是3。

通过Django的命令行工具是可以做到的,我只是还不太确定该如何重写模型的ID创建方法。

在创建Topic时,我是为当前登录的用户创建的(user = request.user),并且是在当前主题下(subject = slug)。

1 个回答

1

你的应用逻辑其实不需要这样做。你犯了个错误,以为可以解析模板的HTML,找到一个值后加一,然后就能在数据库里找到这个ID的东西。与其试图微调数据库来解决这个问题,不如回过头来重新考虑一下你的决定,找个更好的办法。

当你动态创建一个主题时,可以这样做:

  1. 先用新的主题信息向服务器发起一个AJAX请求。
  2. 让一个视图处理这个AJAX请求,并创建视图,返回新生成的主键(pk)。
  3. 使用你从服务器返回的主键,动态生成一个URL,通常是以JSON格式返回的。

撰写回答