2012-07-25 2 views
6

Ich versuche ein benutzerdefiniertes Feld zu meinem Django-Projekt hinzuzufügen, das South verwendet. Aus diesem Grund versuche ich (zum ersten Mal) introspection rules for South zu schreiben. Ich glaube, dass mein Fall so einfach wie möglich ist, da ich einfach ein CharField erweitere. Im Einzelnen:Einfaches benutzerdefiniertes Feld zu Django hinzufügen - So schreiben Sie South Introspection Rules

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) 

Dies ist von einem Schnipsel Django genannt jQuery color picker model field für die Interessenten.

Da ich keine neuen Attribute hinzugefügt bin, ich glaube, ich habe nur diese Zeilen Code hinzufügen:

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

Wahrscheinlich liegt auf der Hand, aber wo sollten sie gehen? Ist meine Annahme, dass dies alles ist, was ich tun muss, richtig?

Ich habe mehrere Fragen hier gepostet, aber die meisten befassen sich mit viel komplexeren Introspektionen.

Pro http://south.readthedocs.org/en/latest/customfields.html#where-to-put-the-code habe ich versucht, den Code an der Spitze meiner models.py-Datei, wo das benutzerdefinierte Feld definiert ist. Aber das hat nicht funktioniert.

Antwort

7

Einfache Antwort: Ja, der Code sollte in der Datei models.py gehen, in der das Feld definiert wurde. Der richtige Code lautet:

Nicht sicher, warum ich den Projektnamen dort hineinstellte.

1

Sie müssen sicherstellen, dass der Pfad zur Datei korrekt ist. Der Name, den Sie erwähnen, ähnelt dem von mir verwendeten, aber der Pfad lautet:

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