【发布时间】:2013-02-18 21:56:10
【问题描述】:
我有一个带有音频文件的 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 回调对我来说特别重要。
【问题讨论】:
标签: django api django-rest-framework