【问题标题】:Django: Model inheriting from base model with custom manager. Can the manager have dynamic variables?Django:模型继承自带有自定义管理器的基本模型。经理可以有动态变量吗?
【发布时间】:2010-01-29 15:27:38
【问题描述】:

我需要让我的所有模型都继承这个管理器(没有测试过这个管理器,这可能很荒谬,所以我也完全愿意接受建议/批评):

class AccountFilterManager(models.Manager):
    def __init__(self, account=None, *args, **kwargs):
        super(AccountFilterManager, self).__init__(*args, **kwargs)
        self.account = account  # account of course will be an instance of Account(models.Model)

    def get_query_set(self):
        if self.account:
            return super(AccountManager,self).get_query_set().filter(account=self.account)

你可以看到我想要做什么。根据我正在处理的帐户限制在任何地方进行过滤的需要。

让这位经理与我的所有模特一起工作的最佳方式是什么?用抽象基模型吗?另外,我如何从视图级别将帐户变量传递给它?这一切都是错误和邪恶的吗?一个星期以来,我一直在努力寻找一种方法来克服这个问题:(。

【问题讨论】:

    标签: django django-models django-managers


    【解决方案1】:

    没有。管理器被实例化为类属性,从而为所有模型实例提供相同的管理器。

    【讨论】:

    • 那么,没有办法从视图或任何地方将帐户变量传递给它吗? (我相信你已经厌倦了我关于这个的问题。非常感谢你的回答。你在帮助我理解这一切是如何结合在一起方面提供了非常丰富的信息。)
    • models 完成导入时已经创建了管理器。
    • 哦。射击。好吧,我在寻找基于当前登录用户帐户的 DRY 过滤的圣杯时已经筋疲力尽了。显然,实现它的唯一方法是使用 threadlocals(我拒绝这样做)。
    • 这增加了整个班级。您可以做的是在模型类上拥有一个属性,该属性返回一个您已经应用.filter() 的管理器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2011-04-20
    • 1970-01-01
    • 2012-02-25
    • 2011-11-14
    • 2017-12-18
    相关资源
    最近更新 更多