当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《有没有办法相对于外键自动增加Django字段?》经验,为你挑选了1个好方法。

我正在编写Django中的一个站点(因为你永远不会学到太多的框架!),我想知道是否有一种方法可以相对于相关对象自动增加一个对象.例如,假设我有一个Entry模型和一个EntryVersion模型:

条目
- 标题
- slu ..

EntryVersion
- 条目(外键)
- version_number
- 内容

我想version_number相对于条目外键自动递增(这样一个条目可能有多个版本,从1开始向上移动一个).但是,它不会是真正的自动增量,因为它在数据库中不是唯一的(可能有许多入口版本,其中version_number = 1;只有一个用于给定的入口).

我知道我可以滚动我自己的管理员并在那里处理它,但是想知道是否有任何方法让Django管理员在保存新条目版本时自动将版本号增加1.


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

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_byW /指数诀窍就是一个我从这里Django文档收集:

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

请注意,您必须default=0在您的version_number字段上定义才能使其正常工作.

可能有更好的方法,但这似乎完全符合我的需要; 希望其他人也会觉得它很有用.



1> Tiago..:

你可以这样做:

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

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有