我有许多非必填字段的Django模型是否有其他方法可以避免null=True
和blank=True
?有blank_fields = ('email','image',)
和null_fields = ('email', 'image')
吗?
答案 0 :(得分:3)
不,Django没有blank_fields
或null_fields
等任何选项。
您可以将字段子类化以创建可选版本,例如OptionalCharField
,但我建议不要这样做。它可能不如重复使用blank=True, null=True
重复,但对于查看代码的其他Django开发人员来说,它的可读性会降低。正如Cezar在评论中建议的那样,null=True
通常不会使用CharField
,因为这意味着您有两个空值,''
和None
。
答案 1 :(得分:2)
默认情况下Django没有提供任何内容。这些属性是每个字段定义,而不是模型级别。您的定义为unique_together
,index_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)),
],
),
]
您也可以为其他字段执行此操作。