2009-07-26 4 views
5

was der beste Weg ist, implementieren die folgenden:Arbeiten mit Django LocalFlavor Zip als Modellfeld

### models.py 
>>> from django.db import models 
>>> from django.contrib.auth.models import User 
# Create the client class. 
>>> class Client(models.Model): 
...  user = models.OntToOneField(User) 
...  zip = ***???***() 

### forms.py 
>>> from django.forms import ModelForm 
# Create the form class. 
>>> class ArticleForm(ModelForm): 
...  class Meta: 
...   model = Client 

Ich versuche, das Endergebnis zu erhalten nur die US Zip Codes Field form widget/validator mit verwenden, Änderungen, welche die models.py Datei. .. aka will ich nicht, folgendes tun:

### forms.py 
>>> from django.forms import ModelForm 
>>> from django.contrib.localflavor.us.forms import USZipCodeField 
# Create the form class. 
>>> class ArticleForm(ModelForm): 
...  class Meta: 
...   model = Client 
...  zip = USZipCodeField() 

HINWEIS: es könnte sein, dass die beste Art und Weise in der forms.py Datei, um sie zu erreichen ist, wie oben gezeigt ... Wenn dies der Fall ist Ich schätze, ich vermisse das Argument/den Vorteil, dass es dort statt als benutzerdefiniertes Modellfeld (z. B. DRY?) loose coupling?) Jegliche Hilfe zum besseren Verständnis der Vorteile von forms.py über models.py in diesem Szenario wäre sehr willkommen.

Vielen Dank im Voraus! -Tom

Antwort

5

Eine Postleitzahl ist nur eine Zeichenfolge aus Zahlen/Buchstaben, so dass Sie kein benutzerdefiniertes Feld zum Speichern in der Datenbank definieren müssen. Momentan gibt es in Django keine Validierung auf Modelebene (obwohl Google Project ein Google Summer of Code-Projekt hinzugefügt hat), sodass ein benutzerdefiniertes Modellfeld nichts hinzufügen würde. Die Validierung erfolgt auf der Formularebene, weshalb ein benutzerdefiniertes Formularfeld vorhanden ist. Diese

0

darf nicht zur Verfügung gestanden haben, wenn Sie die Frage gestellt, aber django 1.4 hat django.contrib.localflavor.us.models.USPostalCodeField(), die Sie denken würden tun würde, was man braucht, aber es ist für die Speicherung dieser 2-Buchstaben-Abkürzungen Zustand, nicht Postleitzahlen, Unglücklicherweise.

Verwandte Themen