Django - 如何设置 blank = False, required = False

8 投票
2 回答
4370 浏览
提问于 2025-04-16 18:43

我有一个这样的模型:

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

我还创建了一个表单来输入这个字段。实际上,Django 允许输入空格,比如如果我在字段里输入一个空格,它也是可以通过的。但是现在我想修正这个问题:这个字段不是必须的,但如果用户输入了空格,验证应该失败。

我添加了:

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

但是它没有起作用。哪里出错了呢?

2 个回答

1

你需要自己创建一个表单,并对表单中的字段进行自定义验证,以确保如果输入了连续的空格,就会被当作验证错误。这就像这样:

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
13

Whitespace 这个东西并不算是 空白。这里的 空白 特指 没有输入(也就是一个空字符串 '')。如果你想检查一个值是否只是由空格组成,你需要用一个模型字段验证器,这个验证器会在值只包含空格时抛出异常。想了解更多细节,可以查看 文档

示例:

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])

撰写回答