不允许在模型属性上使用空字符串

Pic*_*els 2 django

所以我有一个具有以下属性的书模型:

title = models.CharField(max_length=250)
Run Code Online (Sandbox Code Playgroud)

在管理员或模型表单中,这将不允许保存空字符串,因为默认情况下为blank = False.但在我的情况下,我正在解析xml并以这种方式创建模型,所以我根本不使用任何形式.

所以我想知道我可以设置一个不允许空字符串的约束,还是我必须编写我的模型字段或调整我的解析器?

Bra*_*don 6

您仍然可以使用表单来验证数据并创建模型对象,因为ModelForm会返回它创建的对象.我对.xls文件中的模型进行批量更新时使用了这种方法,效果很好.

以这种方式使用表单还可以让您有机会记录出错的错误,启动其他进程或任何您喜欢的内容.

它还可以减轻您手动编辑数据库的负担,如果字符串为空,表单也可以插入默认值.

希望能帮到你.


YPC*_*ble 5

Django 模型的默认值是blank=False,适用于表单验证,而null=False,这意味着数据库不能包含NULL. 如果您不使用表单来实例化模型实例,这些都不会阻止空字符串保存在您的数据库中。

一个好办法做到这一点不使用形式(例如,如果你试图实例使用类createget_or_create)被以覆盖模型的clean方法和调用full_cleansave方法

from django.core.exceptions import ValidationError

    def clean(self):
        if self.title == "":
            raise ValidationError("Database should not contain an empty string title!")

    def save(self):
        self.full_clean()
        super(YourModel, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您也可以将验证放入save函数中。覆盖该clean方法并调用full_cleansave 方法的优点是ValidationError将添加到表单的non_field_errors.