【问题标题】:Get to a Django field value from within the field从字段中获取 Django 字段值
【发布时间】:2015-11-02 14:42:04
【问题描述】:

我在为 Django 应用程序建模时遇到了意想不到的困难。我有一个模型,它由属性组成。某些属性具有外部(主数据)表示。我希望能够同时获得我在应用程序中使用的表示和主数据表示。我的想法是使用自定义 django.db.models 字段,并添加一种方法来获取该主数据表示。然后我可以使用model.field 作为“本机”表示,并使用model.field.mdm_guid() 作为外部表示。

但是,当从 Field 继承时,我还没有找到访问字段自身值的方法。

目前,代码如下所示:

class MdmField(TextField):
    def __init__(self, *kargs, **kwargs):
        self.mdm_type = kwargs.pop('mdm_type', None)

    def mdm_guid(self, value):
        return masterdata[self.mdm_type].get(value, 0)

masterdata 字典包含这些外部表示,但这对于这个问题并不重要。

我很烦恼需要传入字段的值!我不能从字段本身访问字段的值吗?有没有办法从现场拿到模型?

谢谢!

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    注意documentation的这一部分:

    重要的是要意识到 Django 字段类不是存储在模型属性中的内容。模型属性包含普通的 Python 对象。您在模型中定义的字段类在创建模型类时实际上存储在Meta 类中(此处不重要如何完成的精确细节)。这是因为当您只是创建和修改属性时,字段类不是必需的。相反,它们提供了在属性值与存储在数据库中或发送到序列化器的值之间进行转换的机制。

    这就是自定义字段要求您传入一个值的原因 - 它只是进行转换,而不是您的模型实例的一部分。

    相反,您可以只定义一个普通的旧 Python 类,该类具有您的 mdm_guid() 方法,并让您的自定义字段获取并返回它。例如,请参阅上面引用的文档中 Hand 类和 HandField 类之间的区别。

    【讨论】:

    • 感谢您的启发!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2011-02-04
    • 2012-07-27
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多