我目前正在Django中编写一个网站(因为你永远不会学到太多的框架!),我想知道是否有一种方法可以相对于相关对象自动递增一个对象。例如,假设我有一个Entry模型和一个EntryVersion模型:
条目
-标题
-蛞蝓
入口版本
-输入(外键)
-版本号
-内容
我想自动递增
version_number
关于条目外键(这样一个条目可能有多个版本,从一个开始向上移动一个)。不过,这不会是真正的自动增量,因为它在数据库中不会是唯一的(可能有许多版本号=1的条目版本;给定条目只有一个版本)。
我知道我可以滚动自己的管理员并在那里处理这个问题,但我想知道是否有任何方法可以让Django管理员在保存新条目版本时自动将版本号增加一个。
编辑:我使用的特定代码(更正为仅在首次保存时设置版本号)
Tiago的回答是正确的,但为了未来有类似困境的StackOverflow用户的利益,以下是我使用的具体代码:
def save(self, force_insert=False, force_update=False):
# Only modify number if creating for the first time (is default 0)
if self.version_number == 0:
# Grab the highest current index (if it exists)
try:
recent = EntryVersion.objects.filter(entry__exact=self.entry).order_by('-version_number')[0]
self.version_number = recent.version_number + 1
except IndexError:
self.version_number = 1
# Call the "real" save() method
super(EntryVersion, self).save(force_insert, force_update)
这个
order_by
w/index技巧是我从Django文档中收集到的:
http://docs.djangoproject.com/en/dev/topics/db/queries/#id4
请注意,您必须拥有
default=0
定义在您的
版本号
为了使其发挥作用。
也许有更好的方法,但这似乎正是我所需要的;希望其他人也会发现它有用。