我有一个简单的模型如下:

class Group(models.Model):
    name = models.CharField(max_length = 100, blank=False)

我希望这会引发一个完整性错误,但它不会:

group = Group() # name is an empty string here
group.save()

如何确保名称变量设置为非空的值?即使数据库拒绝任何保存空字符串的try ?

推荐答案

从本例中的Django docs开始,您的name将存储为空字符串,因为默认情况下null字段选项为FALSE.如果要定义自定义默认值,请使用default字段选项.

name = models.CharField(max_length=100, blank=False, default='somevalue')

在这个页面上,您可以看到blank与数据库无关.

Update:

您应该覆盖模型的CLEAN函数,以进行自定义验证,因此您的模型定义将为:

class Group(models.Model):
  name = models.CharField(max_length=100, blank=False)
  def clean(self):
    from django.core.exceptions import ValidationError
    if self.name == '':
        raise ValidationError('Empty error message')

或者你可以把ValidationError换成别的.然后在你打group.save()之前,先打group.full_clean(),然后再打clean()

其他与验证相关的内容为here.

Django相关问答推荐

Django的update_or_create失败,尽管指定了kwargs'

对象Django API中的对象

Django测试:如何模拟Django_apps.get_Model()的LookupError

Django ORM多表一对多关系问题

AttributeError:';ManyToOneRel&39;对象没有属性';attname';

Django Prefetch上的多重过滤

Django为不同应用程序发出信号

使用自定义的AuthBackend时,无法使用request.user.is_authenticated或@login_required修饰符

有没有办法在Django中按需/点击仅获取和序列化一部分数据以提高性能?

Docker 中的 Django检测到更改...,正在重新加载错误

将网络测功机添加到 Heroku django 应用程序时如何克服Coudn't find that formation错误?

Python 和 Django OperationalError (2006, 'MySQL server has gone away')

在 django 中是否有生成 settings.SECRET_KEY 的功能?

django Datefield 到 Unix 时间戳

Django urls 直接到 html 模板

Celery - 在一台服务器上运行不同的工作人员

如何过滤(或替换)在 UTF-8 中占用超过 3 个字节的 unicode 字符?

Django Rest 框架 ImageField

Django 模型方法 - create_or_update

Django REST 框架中的每个字段权限