2012-07-25 6 views
6

Próbuję dodać niestandardowe pole do mojego projektu Django, który używa South. Z tego powodu próbuję (po raz pierwszy) napisać introspection rules for South. Uważam, że moja sprawa jest najprostsza z możliwych, ponieważ po prostu rozszerzam CharField. Konkretnie:Dodawanie prostego niestandardowego pola do Django - jak pisać południowe reguły introspekcji

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) 

Jest to urywek z Django nazwie jQuery color picker model field dla zainteresowanych.

Ponieważ ja nie dodając żadnych nowych atrybutów, wierzę, tylko trzeba dodać te linie kodu:

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

To chyba oczywiste, ale gdzie mają iść? Ponadto, czy moje założenie, że to wszystko, co muszę zrobić, jest prawidłowe?

Przejrzałem kilka pytań zamieszczonych tutaj, ale większość dotyczy bardziej złożonych introspekcji.

Per http://south.readthedocs.org/en/latest/customfields.html#where-to-put-the-code, Próbowałem umieścić kod na górze mojego pliku models.py, w którym zdefiniowane jest niestandardowe pole. Ale to nie zadziałało.

Odpowiedz

7

Prosta odpowiedź: tak, kod powinien się znajdować w pliku models.py, w którym zdefiniowano pole. Prawidłowy kod to:

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

Nie wiem, dlaczego umieszczałem tam nazwę projektu.

1

Musisz upewnić się, że ścieżka do pliku jest prawidłowa. Ten, o którym wspomniałeś, wygląda podobnie do tego, którego używam, ale ścieżka jest:

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