django - 有没有一种方法可以相对于外键自动增加Django字段?

标签 django django-models django-admin

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

条目
-标题
-ug

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

http://docs.djangoproject.com/en/dev/topics/db/queries/#id4

请注意,您必须在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.

直接来自这里:

http://docs.djangoproject.com/en/dev/topics/db/models/#overriding-predefined-model-methods

关于django - 有没有一种方法可以相对于外键自动增加Django字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/522997/

相关文章:

mysql - 在南方移民时遇到问题

python - Django 管理器返回今天的所有条目 - DateTimeField

python - 使用外键定义一个抽象模型到另一个抽象模型

python - Django + (django-model-utils) : Combining two models/inheriting from two models

Django 管理模板覆盖 : Displaying checkboxselectmultiple widget

django - 为什么在发布后 FormView 中没有调用 clean ?

python - django IntegerField 和 SmallIntegerFields 映射到 Oracle 上的相同数据库类型

python - 如何根据值确保 django 模型的唯一性?

python - 如何在模型方法字段(不是模型字段)上对 Django 管理列进行排序

django - 以表单形式访问管理模型实例