使用Django LocalFlavor Zip作为模型字段

Tom*_*tes 5 django django-models django-forms

实现以下内容的最佳方法是什么:

### 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
Run Code Online (Sandbox Code Playgroud)

我试图让最终结果使用美国邮政编码字段窗体小部件/验证器只使用models.py文件修改...也就是说我不想做以下事情:

### 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()
Run Code Online (Sandbox Code Playgroud)

注意:可能是完成它的最佳方法是在forms.py文件中,如上所示...如果是这种情况,我想我错过了将它放在那里而不是作为自定义的参数/好处模型字段(例如,DRY?,松散耦合?)在这种情况下,有助于更好地理解forms.py优于models.py的任何帮助都将非常感激.

提前致谢!-Tom

Dan*_*man 5

邮政编码只是一串数字/字母,因此无需定义用于将其存储在数据库中的自定义字段.目前Django中没有模型级验证(虽然有一个Google Summer of Code项目可以添加它),因此自定义模型字段不会添加任何内容.验证来自表单级别,这就是为什么有一个自定义表单字段.