我有一个ModelForm,其中我有一个CharField,在模型中声明为唯一。 但我有两个问题:
是否可以使用ModelForm执行此操作?
答案 0 :(得分:2)
要删除空格,请使用clean_ fieldname 函数去除空格。
http://docs.djangoproject.com/en/dev/ref/forms/validation/#ref-forms-validation
至于唯一性,还要注意元字段unique_together。我不知道你是否需要它,但在我挖掘之前我一直都不知道。
如果在尝试添加和失败之前确实需要进行唯一性检查,则还可以在clean_ *函数中执行此操作。但是,假设数据库将处理它并以标准方式失败,并且只是正确设置错误消息可能更好。这样,如果您稍后更改约束,它将更容易流动。如果其他人必须维护您的代码,它将更加标准。
希望这有帮助。
答案 1 :(得分:2)
你可以做一些接近这个的事情:
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!")