我目前正在用 Django 编写一个站点(因为你永远学不会太多框架!),我想知道是否有一种方法可以相对于相关对象自动增加对象。例如,假设我有一个 Entry 模型和一个 EntryVersion 模型:
条目
- 标题
- slug
EntryVersion
- 条目(外键)
- version_number
- 内容
我想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
定义才能使其正常工作。version_number
可能有更好的方法,但这似乎正是我需要的方式;希望其他人也会发现它很有用。