是否有一种方法可以自动增加有关外键的Django字段?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (16)

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

Entry - title - slug

EntryVersion - entry (foreign key) - version_number - content

我想要自动递增version_number关于输入外键(这样一个条目可能有几个版本,从一个开始,向上移动一个)。但是,它并不是真正的自动增量,因为它在数据库中并不是唯一的(可能有很多版本的条目版本)。_数字=1;仅对给定条目只有一个)。

我知道我可以在那里转到我自己的管理员并处理这个问题,但是我想知道,在保存新的条目版本时,Django管理员是否会自动增加版本号。

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

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_byW/index技巧是我从Django文档中收集到的一个技巧:

请注意,必须default=0定义在version_number字段让这个工作。

也许有更好的方法,但这似乎正是我所需要的方式;希望其他人也会发现它也有用。

提问于
用户回答回答于

你可以这样做:

def save(self, force_insert=False, force_update=False):
    #if self.id is None:
    self.version_number += 1

    super(EntryVersion, self).save(force_insert, force_update) # Call the "real" save() method.

扫码关注云+社区