/ / Arbeiten mit Django LocalFlavor Zip als Modellfeld - django, django-models, django-forms

Arbeiten mit Django LocalFlavor Zip als Modellfeld - django, django-models, django-forms

Was ist der beste Weg, um Folgendes zu implementieren:

### 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 bekommen, um das zu nutzen US Postleitzahlen Feld Formular Widget / Validator mit nur Änderungen die models.py Datei ... aka Ich möchte 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 der beste Weg, dies zu erreichen, in der Datei "forms.py" liegt, wie oben gezeigt ... Wenn das der Fall ist, fehlt mir das Argument / der Vorteil, dass es dort statt als benutzerdefiniertes Modellfeld vorhanden ist (z. B. DRY ?, lose Kopplung?) Jede Hilfe zum besseren Verständnis der Vorteile von forms.py über models.py in diesem Szenario wäre sehr willkommen.

Danke im Voraus! -Tom

Antworten:

5 für die Antwort № 1

Eine Postleitzahl ist nur eine Folge von Zahlen / Buchstaben,Es ist also nicht notwendig, ein benutzerdefiniertes Feld zu definieren, um es in der Datenbank zu speichern. Derzeit gibt es in Django keine Model-Level-Validierung (obwohl es ein Google Summer of Code-Projekt zum Hinzufügen gibt), also ein benutzerdefiniertes Modell Feld würde nichts hinzufügen. Die Validierung erfolgt auf der Formularebene, weshalb es ein benutzerdefiniertes Formularfeld gibt.


0 für die Antwort № 2

Dies muss nicht möglich gewesen sein, als du die Frage gestellt hast, aber django 1.4 hat django.contrib.localflavor.us.models.USPostalCodeField(), was Sie denken würden, würde tun, was Sie brauchen, aber es ist entworfen, um diese zwei Buchstaben Zustand Abkürzungen, nicht Postleitzahlen, leider zu speichern.