没有空字符串的 Django CharField

Posted

技术标签:

【中文标题】没有空字符串的 Django CharField【英文标题】:Django CharField without empty strings 【发布时间】:2014-05-04 06:01:14 【问题描述】:

有没有办法制作一个不接受空字符串的 CharField(或 TextField)?我正在尝试使用blank=False,但它不起作用...

class Foo(models.Model):
    title = models.CharField(max_length=124, blank=False)

然后在syncdb 之后运行python manage.py shell,我可以输入:

f = Foo()
f.save()

它不会抱怨。该对象有一个值为'' 的标题。我希望这种情况发生,如果Foo() 没有明确给出非空字符串,我希望它抱怨。有什么办法吗?

我正在使用 Django 1.6

【问题讨论】:

【参考方案1】:

使用MinLengthValidator

from django.core.validators import MinLengthValidator
...
title = models.CharField(max_length=10, validators=[MinLengthValidator(1)])

【讨论】:

【参考方案2】:

根据documentation,blank=False 纯粹与验证相关,仅适用于表单级别。

查看相关主题:

Django model blank=False does not work? Why are blank and null distinct options for a django model?

【讨论】:

@gyeh 不客气。如果在模型字段级别检查非空值很重要,请考虑制作验证器,请参阅***.com/a/6195014/771848。 @alcxe 是的,通常我会这样做,但我正在尝试创建一个 django-admin 命令来填充数据库,并且我想确保它不接受来自模型端。但我可以检查命令本身中的空字符串。

以上是关于没有空字符串的 Django CharField的主要内容,如果未能解决你的问题,请参考以下文章

Django ORM、CharField 和空白=True

Django ORM、CharField 和空白=True

Django - 使用 Q 跨越空关系的查询集

django连接数据库的类型

Python Django:从空模型字段获取无值

模型字段参考