Django模型 - 重复null的替代方法= True,空白= True

时间:2018-02-24 12:32:24

标签: django django-models

我有许多非必填字段的Django模型是否有其他方法可以避免null=Trueblank=True?有blank_fields = ('email','image',)null_fields = ('email', 'image')吗?

2 个答案:

答案 0 :(得分:3)

不,Django没有blank_fieldsnull_fields等任何选项。

您可以将字段子类化以创建可选版本,例如OptionalCharField,但我建议不要这样做。它可能不如重复使用blank=True, null=True重复,但对于查看代码的其他Django开发人员来说,它的可读性会降低。正如Cezar在评论中建议的那样,null=True通常不会使用CharField,因为这意味着您有两个空值,''None

答案 1 :(得分:2)

默认情况下Django没有提供任何内容。这些属性是每个字段定义,而不是模型级别。您的定义为unique_togetherindex_together,它们是组合不同字段的模型级别定义。

一种方法可以是对子字段进行子类化并提供默认定义 -

class CustomIntegerField(models.IntegerField):
    def __init__(self, *args, **kwargs):
        kwargs['blank'] = True
        kwargs['null'] = True
        super(CustomIntegerField, self).__init__(**kwargs)


class Test(models.Model):
    cus = CustomIntegerField(default=0) 

迁移:

class Migration(migrations.Migration):

    dependencies = [ ]

    operations = [
        migrations.CreateModel(
            name='Test',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('cus', test.models.CustomIntegerField(blank=True, default=0, null=True)),
            ],
        ),
    ]

您也可以为其他字段执行此操作。