【发布时间】:2010-07-08 19:43:13
【问题描述】:
我有一个 ModelForm,其中有一个 CharField,它在模型中被声明为唯一的。 但我有两个问题:
- 如果我用同名字段填写表单,我不会收到错误消息。
- 我希望此字段不包含空格。
是否可以使用 ModelForm 来做到这一点?
【问题讨论】:
我有一个 ModelForm,其中有一个 CharField,它在模型中被声明为唯一的。 但我有两个问题:
是否可以使用 ModelForm 来做到这一点?
【问题讨论】:
你可以做一些类似的事情:
class MyModelForm(forms.ModelForm):
# your field definitions go here
def clean_myuniquefield(self):
# strip all spaces
data = str(self.cleaned_data['myuniquefield']).replace(' ', '')
model = self._meta.model
# check if entry already exists
try:
obj = model.objects.get(myuniquefield=data)
except model.DoesNotExist:
return data
raise forms.ValidationError("Value already exists!")
【讨论】:
要去除空格,请创建一个 clean_fieldname 函数来去除空格。
http://docs.djangoproject.com/en/dev/ref/forms/validation/#ref-forms-validation
至于唯一性,还要注意元字段 unique_together。我不知道你是否需要它,但直到我四处挖掘我才知道它。
如果您确实需要在尝试添加和失败之前进行唯一性检查,您也可以在 clean_* 函数中执行此操作。但是,最好假设数据库会处理它并以标准方式失败,并正确设置错误消息。这样,如果您稍后更改约束,它将更容易通过。如果其他人必须维护您的代码,它会更加标准。
希望这会有所帮助。
【讨论】: