我想覆盖models.py
中的类以在运行时获取调用堆栈。覆盖模型Django之外的models.py中的.objects
我知道我们可以做到在Django以下,以覆盖经理,因此定制查询集API -
所以,在models.py
class A(models.Model):
objects = SomeClass()
和SomeClass
class B(Manager):
def get_query_set():
# override the way you want
但,为了使事情更简单,我正在考虑使用装饰器来覆盖相同 - 因此, 在models.py
@ decoratorForOverriding class A(models.Model): pass
decorator.py
def decoratorForOverriding(cls):
cls.objects = SomeClass()
错误,我得到
是
AttributeError: 'NoneType' object has no attribute '_meta'
任何想法是怎么回事? 我应该让class A
成为一个abstarct类吗?这也没有办法。
你想达到什么目的? – Wtower
装饰者必须返回一些东西。在这里它应该返回修改的类。 –
另外要注意的是,在Django模型类中有相当多的balck魔术发生(比如'django.models.base.ModelBase',特别是'__new __()'方法),所以你的天真解决方案很可能不会工作。 –