Django正则表达式字段 - 唯一且没有空格

时间:2010-07-08 19:43:13

标签: django forms model

我有一个ModelForm,其中我有一个CharField,在模型中声明为唯一。 但我有两个问题:

  1. 如果我使用同名字段填写表单,则不会收到错误消息。
  2. 我希望这个字段不包含空格。
  3. 是否可以使用ModelForm执行此操作?

2 个答案:

答案 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!")