Skip to main content
 首页 » 编程设计

python之装饰器中的 Django Model._meta.get_fields()

2025年02月15日23softidea

我需要访问装饰器中的模型类字段:

from django.db import models 
 
 
class Register: 
    REGISTRY = {} 
 
    def __init__(self, name): 
        self.name = name 
 
    def __call__(self, cls): 
        self.register(cls) 
        return cls 
 
    def register(self, cls): 
        print(cls.__name__, '-', self.name)  # prints: Item - Item registered 
        print(cls._meta.get_fields())  # raises: django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet. 
 
@Register('Item registered') 
class Item(models.Model): 
    title = models.CharField(max_length=200, verbose_name='Title') 

cls._meta.get_fields() 引发: django.core.exceptions.AppRegistryNotReady:模型尚未加载。

如何访问字段?

请您参考如下方法:

所以,我尝试在我自己的机器上使用 django 1.8 复制它,我发现模型字段也可以通过 ._meta.fields 访问。

class Register: 
    REGISTRY = {} 
 
    def __init__(self, name): 
        self.name = name 
 
    def __call__(self, cls): 
        self.register(cls) 
        return cls 
 
    def register(self, cls): 
        print(cls.__name__, '-', self.name)  # prints: Item - Item registered 
        print(cls._meta.fields) # prints all fields