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分别是:
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的东西。与其试图微调数据库来解决这个问题,不如回过头来重新考虑一下你的决定,找个更好的办法。
当你动态创建一个主题时,可以这样做:
- 先用新的主题信息向服务器发起一个AJAX请求。
- 让一个视图处理这个AJAX请求,并创建视图,返回新生成的主键(pk)。
- 使用你从服务器返回的主键,动态生成一个URL,通常是以
JSON
格式返回的。