猿问

Django FileField 不尊重 null=False 参数

我有一个设置为不可为空的 Django FileField。但是,它的行为就像可以为空。


class Thing(models.Model):

    document = models.FileField(null=False, blank=False)

    thing_id = models.CharField()  



# This does not raise but I would like it to

Thing.objects.create(thing_id='123')

编辑:迁移


class Migration(migrations.Migration):


    dependencies = [

        ('data_source', '0002_auto_20190212_1913'),

    ]


    operations = [

        migrations.CreateModel(

            name='Thing',

            fields=[

                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),

                ('document', models.FileField(upload_to='')),

                ('thing_id', models.CharField(default=None, max_length=200)),

            ],

            options={

                'abstract': False,

            },

        ),

    ]


jeck猫
浏览 283回答 3
3回答

慕慕森

问题不在于您的字段定义。它与手动创建模型实例时的验证有关。您需要自己执行完整的验证,因为您没有使用 ModelForm。使用这个例子:from django.core.exceptions import ValidationErrorthing = Thing(thing_id='123')try:    thing.full_clean()    thing.save()except ValidationError:    # Handle validation issues.阅读文档中的这一部分:https : //docs.djangoproject.com/en/2.1/ref/models/instances/#validating-objects从那里引用:请注意,当您调用模型的 save() 方法时,不会自动调用 full_clean()。当您想为自己手动创建的模型运行一步模型验证时,您需要手动调用它

慕标5832272

默认情况下null,对于每个模型字段black都是 False链接。不需要添加那些。from django.db import modelsclass Thing(models.Model):    document = models.FileField()    thing_id = models.CharField()  

胡说叔叔

您可以直接在模型覆盖save()方法中添加验证:class Thing(models.Model):    document = models.FileField(null=False, blank=False, default=None)    thing_id = models.CharField(max_length=200)    def save(self, *args, **kwargs):        self.full_clean()        super().save(*args, **kwargs)
随时随地看视频慕课网APP

相关分类

Python
我要回答