Django,自定义管理器会影响保存方法吗?

刻板的

我正在使用Django 1.7。我有一个默认的自定义管理器,可以对“活动”布尔字段进行过滤。根据文档,它必须是与相关字段一起使用的默认管理器(即访问User.story_set仅显示活动的Story对象)。我保留用于管理员和外壳程序访问的标准管理器,但是我无法保存对对象的更改,我推测是因为save()方法在某些时候会通过默认管理器。

class Story(models.Model):
    active = models.BooleanField(default=True)
    ....

    objects = ActiveStoryManager()
    full_set = models.Manager()

class ActiveStoryManager(models.Manager):
    def get_query_set(self):
        return super(ActiveStoryManager, self).get_query_set().filter(active=True)
    use_for_related_fields = True

这非常适合所有面向公众的使用。但是,在admin和shell中,我无法影响不活动的对象,包括将它们恢复为活动状态。

story = Story.full_set.get(id=#)将通过获取一个故事active=False,但是设置后active=True我无法保存,得到一个

django.db.utils.IntegrityError: duplicate key value violates unique constraint "stories_story_pkey" DETAIL: Key (id)=(#) already exists.

调用save.(force_update=True)返回django.db.utils.DatabaseError: Forced update did not affect any rows.

因此,尽管save()是一种模型方法,但它似乎在保存过程中的某些时候依赖于默认管理器。

一种解决方法是使用Queryset API(例如)Story.full_set.filter(id=#).update(active=True),但这仅在Shell中可用,并且需要手动键入每个更改,但仍无法在管理员中保存非活动实例。

有什么帮助吗?

刻板的

无法做到!正如inancsevinc指出的那样,save()在默认管理器上调用。Django文档提到get_query_set不应默认经理进行修改,我也伤心地找到了原因。希望将来可以指定/控制relatedManager,但目前此方法不适用于我。在Django IRC聊天中确认。

相反,我将普通的Manager方法以及某些模型的模型方法放在一起以获得等效的功能。还需要更改related_set模板中的所有调用以包括新方法,所以这很麻烦,但没有其他方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django自定义模型管理器

来自分类Dev

django自定义管理器manytomany字段添加

来自分类Dev

自定义模型管理器的链接方法

来自分类Dev

django-避免针对特定查询的自定义管理器的方法

来自分类Dev

Phalcon \ MVC \ Models中的自定义事件管理器会引发错误

来自分类Dev

Django单元测试-如何断言自定义管理器调用UserManager.create_user方法?

来自分类Dev

django-在查询集中的每个对象上使用方法,例如过滤器'__in'自定义管理器

来自分类Dev

Django:如何级联在不同抽象类中定义的自定义管理器?

来自分类Dev

什么时候应该在Django中使用自定义管理器而不是自定义QuerySet?

来自分类Dev

Django queryset .count().filter()在自定义模型管理器上不起作用

来自分类Dev

使用自定义管理器创建带有django对象的目的?

来自分类Dev

django 在自定义管理器中访问相关模型状态

来自分类Dev

使用自定义查询集作为管理器,在自定义过滤方法后再次过滤

来自分类Dev

AFNetworking 2自定义会话管理器

来自分类Dev

自定义内存管理器抽象

来自分类Dev

自己的自定义Android策略管理器

来自分类Dev

SBT自定义冲突管理器

来自分类Dev

自定义可拖动布局管理器

来自分类Dev

自定义下载管理器JavaScript

来自分类Dev

自己的自定义Android策略管理器

来自分类Dev

SSRS-报表管理器自定义网址

来自分类Dev

AFNetworking 2自定义会话管理器

来自分类Dev

自定义对象下载管理器

来自分类Dev

使用 npm 作为自定义插件管理器?

来自分类Dev

Android:自定义对象中的警报管理器?

来自分类Dev

自定义布局管理器滚动/动画

来自分类Dev

如何自定义 Nemo 文件管理器?

来自分类Dev

从Reporting Services中删除内容管理器时,会产生什么影响吗?

来自分类Dev

Django中的自定义保存方法

Related 相关文章

  1. 1

    Django自定义模型管理器

  2. 2

    django自定义管理器manytomany字段添加

  3. 3

    自定义模型管理器的链接方法

  4. 4

    django-避免针对特定查询的自定义管理器的方法

  5. 5

    Phalcon \ MVC \ Models中的自定义事件管理器会引发错误

  6. 6

    Django单元测试-如何断言自定义管理器调用UserManager.create_user方法?

  7. 7

    django-在查询集中的每个对象上使用方法,例如过滤器'__in'自定义管理器

  8. 8

    Django:如何级联在不同抽象类中定义的自定义管理器?

  9. 9

    什么时候应该在Django中使用自定义管理器而不是自定义QuerySet?

  10. 10

    Django queryset .count().filter()在自定义模型管理器上不起作用

  11. 11

    使用自定义管理器创建带有django对象的目的?

  12. 12

    django 在自定义管理器中访问相关模型状态

  13. 13

    使用自定义查询集作为管理器,在自定义过滤方法后再次过滤

  14. 14

    AFNetworking 2自定义会话管理器

  15. 15

    自定义内存管理器抽象

  16. 16

    自己的自定义Android策略管理器

  17. 17

    SBT自定义冲突管理器

  18. 18

    自定义可拖动布局管理器

  19. 19

    自定义下载管理器JavaScript

  20. 20

    自己的自定义Android策略管理器

  21. 21

    SSRS-报表管理器自定义网址

  22. 22

    AFNetworking 2自定义会话管理器

  23. 23

    自定义对象下载管理器

  24. 24

    使用 npm 作为自定义插件管理器?

  25. 25

    Android:自定义对象中的警报管理器?

  26. 26

    自定义布局管理器滚动/动画

  27. 27

    如何自定义 Nemo 文件管理器?

  28. 28

    从Reporting Services中删除内容管理器时,会产生什么影响吗?

  29. 29

    Django中的自定义保存方法

热门标签

归档