gpt4 book ai didi

python - Django 'File' 对象在管理中的更改表单上没有属性 '_size'

转载 作者:行者123 更新时间:2023-11-30 23:04:38 27 4
gpt4 key购买 nike

我有这个模型,它有一个干净的方法来验证 django admin 中 mp3 文件的上传(注意 audio_file 字段):

class Cancion(models.Model):


nombre = models.CharField(max_length=100
,verbose_name=_("nombre"))
audio_file = models.FileField(upload_to="audio"
, verbose_name=_("audio"))
album = models.ManyToManyField("music_manager.Album"
,through="music_manager.CancionAlbum"
,through_fields=('cancion', 'album')
,verbose_name=_("canciones_albums")
,related_name="cancione_albums")
reproducciones = models.IntegerField(verbose_name=_("reproducciones")
,default=0)

playlist = models.ManyToManyField("music_manager.Playlist"
,through="music_manager.CancionPlaylist"
,through_fields=('cancion', 'playlist')
,verbose_name=_("canciones_playlist")
,related_name="cancione_playlist")

class Meta:


verbose_name_plural= "Canciones"
verbose_name = "Cancion"
# Override the __unicode__() method to return out something meaningful!
def __unicode__(self):


return self.nombre

def clean(self):
file = self.audio_file.file
print("Archivo: "+str(file))
if file:
if file._size > 20*1024*1024:
raise ValidationError(_("El archivo de audio es demasiado grande ( > 20mb )"))
if not file.content_type in ["audio/mp3"]:
raise ValidationError(_("El archvivo no es MP3"))
if not os.path.splitext(file.name)[1] in [".mp3",]:
raise ValidationError(_("El archivo no posee la extension apropiada"))
# Here we need to now to read the file and see if it's actually
# a valid audio file. I don't know what the best library is to
# to do this

return file
else:
raise ValidationError("Couldn't read uploaded file")

当创建新的模型对象时,clean 函数效果很好。但是,当更改管理更改表单上的对象属性时,我得到:

'File' object has no attribute '_size'

谁能告诉我我做错了什么?

最佳答案

_size 是一个内部 Django 属性,用于缓存文件大小 - 它并不总是被设置(例如,在管理中编辑现有对象时)。您不应该直接访问它。

尝试file.size .

关于python - Django 'File' 对象在管理中的更改表单上没有属性 '_size',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33591359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com