向Django添加简单自定义字段 - 如何编写南方自省规则

时间:2012-07-25 03:29:25

标签: django django-admin django-south

我正在尝试向使用South的Django项目添加自定义字段。因此,我正在尝试(第一次)写introspection rules for South。我相信我的案例是最简单的,因为我只是扩展了CharField。具体做法是:

class ColorField(models.CharField):
    def __init__(self, *args, **kwargs):
        kwargs['max_length'] = 10
        super(ColorField, self).__init__(*args, **kwargs)

    def formfield(self, **kwargs):
        kwargs['widget'] = ColorPickerWidget
        return super(ColorField, self).formfield(**kwargs)

对于那些感兴趣的人来说,这是来自名为jQuery color picker model field的Django片段。

由于我没有添加任何新属性,我相信我只需要添加以下代码行:

from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^myproject\.myapp\.models\.ColorField"])

可能很明显,但他们应该去哪里?另外,我的假设是,这是我必须做的所有事情吗?

我已经回顾了这里发布的几个问题,但大多数问题涉及更为复杂的内省。

Per http://south.readthedocs.org/en/latest/customfields.html#where-to-put-the-code,我尝试将代码置于我的models.py文件的顶部,其中定义了自定义字段。但这没效果。

2 个答案:

答案 0 :(得分:7)

简单回答:是的,代码应该放在定义字段的models.py文件中。正确的代码是:

from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^myapp\.models\.ColorField"])

我不知道为什么要把项目名称放在那里。

答案 1 :(得分:1)

您必须确保文件的路径正确。你提到的那个看起来与我正在使用的那个相似,但路径是:

add_introspection_rules([], ["^colors\.fields\.ColorField"])