【问题标题】:Django regex field - unique and without blank spacesDjango 正则表达式字段 - 唯一且没有空格
【发布时间】:2010-07-08 19:43:13
【问题描述】:

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

  1. 如果我用同名字段填写表单,我不会收到错误消息。
  2. 我希望此字段不包含空格。

是否可以使用 ModelForm 来做到这一点?

【问题讨论】:

    标签: django forms model


    【解决方案1】:

    你可以做一些类似的事情:

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

    【讨论】:

      【解决方案2】:

      要去除空格,请创建一个 clean_fieldname 函数来去除空格。

      http://docs.djangoproject.com/en/dev/ref/forms/validation/#ref-forms-validation

      至于唯一性,还要注意元字段 unique_together。我不知道你是否需要它,但直到我四处挖掘我才知道它。

      如果您确实需要在尝试添加和失败之前进行唯一性检查,您也可以在 clean_* 函数中执行此操作。但是,最好假设数据库会处理它并以标准方式失败,并正确设置错误消息。这样,如果您稍后更改约束,它将更容易通过。如果其他人必须维护您的代码,它会更加标准。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2020-04-06
        • 2018-12-03
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        • 1970-01-01
        • 2017-08-01
        相关资源
        最近更新 更多