首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法让Django字段相对于外键自动递增?

有没有办法让Django字段相对于外键自动递增?
EN

Stack Overflow用户
提问于 2009-02-07 02:27:56
回答 1查看 9.1K关注 0票数 23

我目前正在用Django编写一个站点(因为你永远不会学习太多的框架!),我想知道是否有一种方法可以让对象相对于相关的对象自动递增。例如,假设我有一个入口模型和一个EntryVersion模型:

入口

  • title
  • slug

EntryVersion

外部key)

  • version_number

  • content

条目(

  • entry

我希望针对条目外键自动递增version_number (这样一个条目可能有多个版本,从一个版本开始,向上移动一个版本)。不过,它不是真正的自动递增,因为它在数据库中不是惟一的(可能有许多条目版本的version_number = 1;一个给定条目只有一个)。

我知道我可以启动我自己的管理员并在那里处理这个问题,但我想知道是否有任何方法可以让Django管理员在保存新的条目版本时自动将版本号加一。

编辑:我使用的特定代码(更正为仅在第一次保存时设置版本号)

蒂亚戈的回答是正确的,但为了将来有类似困境的StackOverflow用户的兴趣,下面是我使用的具体代码:

代码语言:javascript
复制
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

请注意,您必须在version_number字段上定义default=0,这样才能正常工作。

也许有一种更好的方法,但这似乎完全符合我的需要;希望其他人也能发现它的用处。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/522997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档