2012-07-25 15 views
6

Estoy tratando de agregar un campo personalizado a mi proyecto Django que usa South. Debido a esto, estoy intentando (por primera vez) escribir introspection rules for South. Creo que mi caso es el más simple posible ya que simplemente extiendo un CharField. Específicamente:Agregar campo personalizado simple a Django - Cómo escribir reglas de introspección sur

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) 

Se trata de un fragmento de Django llamada jQuery color picker model field para los interesados.

Como yo no estoy añadiendo nuevos atributos, creo que no tengo más que añadir estas líneas de código:

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

es probable que sea obvio, pero ¿dónde debería ir? Además, ¿asumo que esto es todo lo que tengo que hacer?

He revisado varias preguntas publicadas aquí, pero la mayoría se ocupan de introspecciones mucho más complejas.

Por http://south.readthedocs.org/en/latest/customfields.html#where-to-put-the-code, he intentado poner el código en la parte superior de mi archivo models.py donde está definido el campo personalizado. Pero esto no funcionó.

Respuesta

7

Respuesta simple: sí, el código debe ir en el archivo models.py donde se definió el campo. El código correcto es:

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

No estoy seguro de por qué estaba poniendo el nombre del proyecto allí.

1

Debe asegurarse de que la ruta al archivo sea correcta. El que mencionas es similar al que estoy usando, pero la ruta es:

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