2011-01-17 21 views
13

Estoy usando Django 1.2.3 y South 0.7.3.regla de introspección Django-Sur no funciona

Estoy tratando de convertir mi aplicación (llamada core) para usar Django-South. Tengo un modelo/campo personalizado que estoy usando, llamado ImageWithThumbsField. Es básicamente el viejo django.db.models.ImageField con algunos atributos tales como altura, peso, etc.

Al tratar de ./manage.py convert_to_auth core I receieve congelación errores del Sur. No tengo ni idea de por qué, probablemente estoy perdiendo algo ...

estoy usando un simple modelo personalizado:

from django.db.models import ImageField 

class ImageWithThumbsField(ImageField): 
    def __init__(self, verbose_name=None, name=None, width_field=None, height_field=None, sizes=None, **kwargs): 
     self.verbose_name=verbose_name 
     self.name=name 
     self.width_field=width_field 
     self.height_field=height_field 
     self.sizes = sizes 
     super(ImageField, self).__init__(**kwargs) 

y este es mi regla de la introspección, que agrego a la parte superior de mi models.py :

from south.modelsinspector import add_introspection_rules 
from lib.thumbs import ImageWithThumbsField 

add_introspection_rules(
    [ 
     (
      (ImageWithThumbsField,), 
      [], 
      { 
       "verbose_name": ["verbose_name", {"default": None}], 
       "name":   ["name",   {"default": None}], 
       "width_field": ["width_field", {"default": None}], 
       "height_field": ["height_field", {"default": None}], 
       "sizes":  ["sizes",  {"default": None}], 
      }, 
     ), 
    ], 
    ["^core/.fields/.ImageWithThumbsField",]) 

se trata de los errores que receieve:

! Cannot freeze field 'core.additionalmaterialphoto.photo' 
! (this field has class lib.thumbs.ImageWithThumbsField) 
! Cannot freeze field 'core.material.photo' 
! (this field has class lib.thumbs.ImageWithThumbsField) 
! Cannot freeze field 'core.material.formulaimage' 
! (this field has class lib.thumbs.ImageWithThumbsField) 

! South cannot introspect some fields; this is probably because they are custom 
! fields. If they worked in 0.6 or below, this is because we have removed the 
! models parser (it often broke things). 
! To fix this, read http://south.aeracode.org/wiki/MyFieldsDontWork 

¿alguien sabe por qué? ¿Qué estoy haciendo mal?

Respuesta

17

¡Lo tengo! :)

me cambió esto: ["^core/.fields/.ImageWithThumbsField",]

A esto: ["^lib\.thumbs\.ImageWithThumbsField",]

toda esta línea es una las expresiones regulares que de caminos pitón de tipos de campos Django (leer esto de nuevo, frase larga) .

South tropezó con un nombre de campo ImageWithThumbsField que se declaró en la ruta lib.thumbs. Le di un camino equivocado, por lo que South todavía no sabía qué hacer al tropezar con este campo.

Una vez que le di el camino correcto, supo cómo manejar el campo una vez que llegó a él.

+0

Aún no puedo aceptar la respuesta, http://StackOverflow.com dice que debo esperar 2 días antes de hacerlo. –

+4

Probablemente esta pregunta es demasiado específica para llamar la atención, pero sé que me salvaste el día. Tardaría horas en llegar a la solución, y esto fue lo que realmente funcionó. Al igual que una nota al margen, lo que funcionó para mí fue ["^ myapp.thumbs.ImageWithThumbsField",] ya que mi archivo thumbs.py está dentro del directorio myapp. ¡Aclamaciones! – rlafuente

+0

NP. Encantado de ayudar. :) –

Cuestiones relacionadas