如何创建自定义相关模型字段?

时间:2014-11-13 09:35:02

标签: django django-models django-1.7

我创建了一个继承自OneToOneField ::

的新字段
class MeasureField(models.OneToOneField):
    """ A custom Django model Field for Measure """

    __metaclass__ = models.SubfieldBase

    description = _("Measurement")

    def __init__(self, *args, **kwargs):
        self.measure_types = args
        args = (Measure,)
        if 'to' in kwargs.keys():
            args = tuple()
        super(MeasureField, self).__init__(*args, **kwargs)

    def deconstruct(self):
        name, path, args, kwargs = super(MeasureField, self).deconstruct()
        args = self.measure_types
        return name, path, args, kwargs

它只需要一个列表参数(args)并且始终与模型Measure相关。但是,当我尝试将它放在模型上并创建一个模型时:

basic_condition = MeasureField(
    'Density',
    related_name="basic_condition_of_product",
)

我有以下错误:

AttributeError: 'Product' object has no attribute 'basic_condition_id'

我知道相关字段会为数据库添加一个附加_id的属性。但我不知道为什么我的自定义字段不会这样做。

我该怎么创造它?

1 个答案:

答案 0 :(得分:0)

我实际上不应该添加元类SubfieldBase。没有它,它工作正常。