【问题标题】:Working with Django LocalFlavor Zip as a Model Field使用 Django LocalFlavor Zip 作为模型字段
【发布时间】:2023-06-13 20:38:01
【问题描述】:

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

### 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

我正在尝试使用 US Zip Codes Field form widget/validator 来获得最终结果,只使用修改 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()

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

提前致谢! -汤姆

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      当您提出问题时,这一定不可用,但 django 1.4 有 django.contrib.localflavor.us.models.USPostalCodeField(),您认为它可以满足您的需求,但它旨在存储那些 2 字母的状态缩写,而不是邮政编码, 很遗憾。

      【讨论】:

        最近更新 更多