【发布时间】:2016-01-01 17:36:24
【问题描述】:
为了开发自定义 Django 模型字段,我正在阅读文档。
我已经开发了我的自定义字段(几乎等于示例中的HandField:映射到 Python 类上的字段...唯一的区别是我继承自 models.CharField 而不是 @987654324 @)。
from external_library import ExternalClass
class ExternalClassField(models.CharField):
description = "An ExternalClass field"
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 14
super(ExternalClassField, self).__init__(*args, **kwargs)
def from_db_value(self, value, expression, connection, context):
if value is None:
return value
return ExternalClass(value)
def to_python(self, value):
if isinstance(value, ExternalClass):
return value
if value is None:
return value
return ExternalClass(value)
def get_prep_value(self, value):
if value is None:
return value
if isinstance(value, ExternalClass):
return value.to_string()
return value
该字段的行为符合预期。但是,我被困在文档的这一部分:deconstruct() 函数。
特别是我不明白的是:
- 解构函数的具体用途是什么?
- 为什么我的字段即使没有它也能完美运行(即使我修改了
init参数)? - Django 如何以及何时调用解构函数?
不想一味的复制粘贴看不懂的代码,但是文档不清楚。
【问题讨论】:
-
在迁移中用于序列化字段。