【问题标题】:How to access Django model when overriding Manager?覆盖 Manager 时如何访问 Django 模型?
【发布时间】:2014-03-25 20:37:29
【问题描述】:

我在共享管理器类中重写了“get”方法,但我不知道如何获取初始调用者。例如当我运行时:

Animal.objects.get() -or- Plant.objects.get()

如何让“get”知道它是从 Animal/Plant 调用的而不传递任何参数?

这是我的参考代码:

class CommonManager(models.Manager):
  def get(self, *args, **kwargs):
     print ??? #how do I print Animal or Plant here?


class CommonModel(models.Model):
  objects = CommonManager()
  #stuff

class Animal(CommonModel):
  #stuff

class Plant(CommonModel):
  #stuff

【问题讨论】:

    标签: python django oop


    【解决方案1】:

    看源码,好像是self.model

    【讨论】:

    • 这成功了!非常感谢,请问您看的是哪部分源码?我是 Django 新手,经常遇到文档问题。
    • docs.djangoproject.com/en/dev/topics/db/managers/… 中提到过(“关于此示例的另一件事是,Manager 方法可以访问 self.model 以获取它们所附加的模型类。”)。不过,很容易错过这一点。如果您没有其他简单的方法来浏览代码/超类,那么在 do a dir(self) 中放入 Python 调试器通常是一个不错的策略。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2018-10-07
    • 2021-11-21
    • 1970-01-01
    • 2020-06-14
    相关资源
    最近更新 更多