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

标签 python django

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

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

关于python - 装饰器中的 Django Model._meta.get_fields(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41726727/

相关文章:

python - 如何处理需要过多参数的函数?

python - 需要一些帮助从列表中删除数据并再次将其附加到同一列表中

Django 模板 : Best practice for translating text block with HTML in it

django - DRF:自定义权限被拒绝的消息

python - Django:从模型的相关集合中获取相关集合

javascript - Selenium / python : extract text from a dynamically-loading webpage after every scroll

python - MacOS X 上的 pip install lxml 给出错误 : command 'cc' failed

django - 选择每个字段/列具有最大字段/列值的实例/行(分组依据)

python - Rabbitmq - 队列状态显示为 'running',GUI 显示状态为 IDLE

python - 使用 pulp cbc 求解器时,我可以设置约束的优先级吗?