我在为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
字典包含这些外部表示,但这对此问题并不重要。
我对传递领域价值的需要感到困扰!我是否可以从字段内访问字段的值?有没有办法从现场进入模型?
谢谢!
答案 0 :(得分:1)
请注意documentation:
的这一部分重要的是要意识到Django字段类不是存储在模型属性中的字段。模型属性包含普通的Python对象。您在模型中定义的字段类实际上在创建模型类时存储在
Meta
类中(这里完成此操作的具体细节并不重要)。这是因为当您只是创建和修改属性时,不需要字段类。相反,它们提供了在属性值和存储在数据库中或发送到序列化器的内容之间进行转换的机制。
这就是为什么自定义字段要求您传入一个值 - 它只是进行转换,它不是您的模型实例的一部分。
相反,您可以定义一个具有mdm_guid()
方法的普通旧Python类,并让您的自定义字段获取并返回该类。有关示例,请参阅上面引用的文档中Hand
类和HandField
类之间的区别。