【问题标题】:Django - how to set blank = False, required = FalseDjango - 如何设置空白 = False,必需 = False
【发布时间】:2011-09-05 21:40:47
【问题描述】:

我有一个这样的模型:

class Message(models.Model):
    msg = models.CharField(max_length = 150)

我有一个用于插入字段的表单。实际上 django 允许空格,例如,如果我在字段中插入一个空格,它可以工作。但现在我想解决这个问题:该字段不是必需的,但如果用户插入空格,验证应该会失败。

我已添加:

class Message(models.Model):
    msg = models.CharField(max_length = 150, blank = False)

但它不起作用。 怎么回事?

【问题讨论】:

  • Blank 表示空字符串(与空值相反)- 带有空格的字符串不是空白的。如果你想防止一个只有空格的字段,我认为你必须编写自己的自定义 clean 方法。

标签: python django


【解决方案1】:

Whitespace 不被视为空白blank 特指无输入(即空字符串'')。如果值仅包含空格,您将需要使用引发异常的模型字段验证器。详情请见the documentation

例子:

def validate_not_spaces(value):
    if isinstance(value, str) and value.strip() == '':
        raise ValidationError(u"You must provide more than just whitespace.")

class Message(models.Model):
    msg = models.CharField(max_length=150, blank=False,
                           validators=[validate_not_spaces])

【讨论】:

  • 我的编辑已被拒绝,但除了value.strip() == '' 之外,您还应该执行isinstance(value, str) 检查,因为如果它检查的字段值为None 类型,您的原始函数将中断(您可以'不要打电话给.strip())。
  • 没问题 - 我前几天实现了这个,所以这是我抓住它的唯一原因。虽然我们正在这样做,但有什么理由不使用not value.strip() 而不是value.strip() == ''
【解决方案2】:

您需要创建自己的表单并在字段上执行自定义验证,以确保将重复的空格作为验证错误引发。像这样的:

import re

class MessageForm(form.ModelForm)
    def clean_msg(self):
        msg = self.cleaned_data['msg']
        if re.match('/[\s]+$',msg):
            raise ValidationError("Spaces not allowed")
        return msg

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-15
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    相关资源
    最近更新 更多