IntegerField自动设置为FileField的大小

时间:2013-12-21 14:40:07

标签: python django

我有一些使用FileField和一堆验证器的模型

class VideoContent(models.Model):
    file = models.FileField(upload_to='video_files', validators=[validate_file_extension, validate_file_size])
    size = models.IntegerField(null=False)

有没有办法根据文件大小自动计算大小?

1 个答案:

答案 0 :(得分:1)

您应该使用默认设置的FileField.size属性。

您的文件大小验证程序应如下所示:

def validate_file_size(value):
    if value.size > 1048576:  # Larger than 1MB
        raise ValidationError(u'%s file is too big' % value.name)

您还可以重写模型save()以在保存对象时设置VideoContent.size值:

class VideoContent(models.Model):
    ...
    def save(self, *args, **kwargs):
        self.size = self.file.size
        super(VideoContent, self).save(*args, **kwargs)
        self.size = self.file.size