6

我正在尝试向使用South的 Django 项目添加自定义字段。因此,我正在尝试(第一次)为 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 颜色选择器模型字段的 Django 片段,供感兴趣的人使用。

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

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

这可能很明显,但他们应该去哪里?另外,我的假设是我必须做的一切正确吗?

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

根据http://south.readthedocs.org/en/latest/customfields.html#where-to-put-the-code,我尝试将代码放在定义自定义字段的 models.py 文件顶部. 但这并没有奏效。

4

2 回答 2

7

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

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

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

于 2012-07-25T03:45:22.740 回答
1

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

add_introspection_rules([], ["^colors\.fields\.ColorField"])
于 2012-08-20T20:26:42.847 回答