2011-01-17 6 views
13

Sto utilizzando Django 1.2.3 e South 0.7.3.La regola di introspezione di Django-Sud non funziona

Sto provando a convertire la mia app (denominata core) per utilizzare Django-Sud. Ho un modello/campo personalizzato che sto utilizzando, denominato ImageWithThumbsField. E 'fondamentalmente solo l'ol' django.db.models.ImageField con alcuni attributi come altezza, peso, ecc

Durante il tentativo di ./manage.py convert_to_auth core I receieve congelamento errori del Sud. Non ho idea del perché, sono probabilmente manca qualcosa ...

Sto usando un semplice modello personalizzato:

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) 

E questa è la mia regola introspezione, che aggiungo alla parte superiore del mio 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",]) 

Questo è gli errori che 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 

qualcuno sa perché? Che cosa sto facendo di sbagliato?

risposta

17

Ho capito! :)

ho cambiato questo: ["^core/.fields/.ImageWithThumbsField",]

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

tutta questa linea è un espressioni regolari di percorsi pitone di Django tipi di campo (leggere questo nuovo, lungo periodo) .

Sud si è imbattuto in un nome di campo ImageWithThumbsField dichiarato nel percorso lib.thumbs. Gli ho dato una strada sbagliata, quindi Sud ancora non sapevo cosa fare quando mi sono imbattuto in questo campo.

Una volta che gli ho dato il percorso corretto, sapeva come gestire il campo una volta arrivato.

+0

Non posso ancora accettare la risposta, http://StackOverflow.com dice che devo aspettare 2 giorni prima di farlo. –

+4

Probabilmente questa domanda è troppo specifica per attirare molta attenzione, ma sappi che hai salvato la mia giornata. Ci vorrebbero ore per raggiungere la soluzione, e questo ha fatto il trucco. Proprio come un sidenote, quello che ha funzionato per me è stato ["^ myapp.thumbs.ImageWithThumbsField",] poiché thumbs.py si trova nella directory myapp. Saluti! – rlafuente

+0

NP. Felice di aiutare. :) –