我有一个带有音频文件的 django 模型:
class Thing(models.Model):
audio_file = AudioFileField( upload_to=audio_dir, blank=True, null=True )
photo_file = models.ImageField( upload_to=img_dir, blank=True, null=True )
...
其中是执行一些验证AudioFileField
的子类:FileField
class AudioFileField(models.FileField):
def validate(self, value, model_instance):
try:
if not (value.file.content_type == "audio/x-wav" or
value.file.content_type == "audio/amr" or
value.file.content_type == "video/3gpp"):
raise ValidationError(u'%s is not an audio file' % value)
except IOError:
logger.warning("no audio file given")
audio_dir
回调设置路径并重命名文件:
def audio_dir(instance, filename):
return os.path.join("audio", "recording_%s%s" % (
datetime.datetime.now().isoformat().replace(":", "-"),
os.path.splitext(filename)[1].lower() ))
在 Django REST 框架中ImageField
工作正常,但子类AudioFileField
没有。这是因为子类serializers.FileField
不接受关键字参数upload_to
。
如何通过 API 公开相同的功能?audio_dir
回调对我来说特别重要。