我想覆蓋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 __()'方法),所以你的天真解決方案很可能不會工作。 –