我想创建一个Django模型,其中包含一个FileField
来存储图像和视频文件,但我想在保存实例之前验证这些文件。我考虑过添加三个字段:
file
:一个FileField
字段。这将只用于在数据库中具有file
列,但序列化程序不会使用它(而是使用接下来的两个字段)李>file_image
:用于执行图像文件验证的ImageField
。在保存模型实例之前,文件将被分配到file
字段我不希望此字段具有dabatase表示形式李>file_video
:用于执行视频文件验证的VideoField
(自定义字段)。在保存模型实例之前,文件将被分配到file
字段我不希望此字段具有dabatase表示形式李>当然,file_image
和file_video
不会同时设置
问题是阻止makemigrations
在迁移中包括file_image
和file_video
。我可以手工编辑迁移文件,但不知是否有办法自动忽略这些字段
class MyModel(models.Model):
file = models.ImageField()
file_image = models.ImageField() # Not an actual column
file_video = models.VideoField() # Not an actual column
def save(self, *args, **kwargs):
if self.file_image.file is not None:
self.file.file = self.file_image.file
elif self.file_video.file is not None:
self.file.file = self.file_video.file
else:
raise ValidationError()
super().save(*args, **kwargs)
好的,所以我放弃了向模型中添加额外字段的最初想法,只留下了
file
字段,正如@schillingt所建议的那样。现在,我在clean()
方法中使用自定义验证来验证文件类型我知道这是一个丑陋的解决方案,但这能奏效吗?我的意思是,我测试了它,它似乎起了作用,但肯定会有更好、更优雅的方式
您的模型表示数据库中的内容。我建议你不要以这种方式对抗ORM。相反,我将在创建/更新实例时使用的表单类中执行验证。使用该表单可以定义字段
file_video
和file_image
,然后使用该字段写入file
相关问题 更多 >
编程相关推荐