Как определить, загрузил ли пользователь поле ImageField или FileField?
У меня есть следующая модель и функция для установки путей загрузки либо файлов изображений, либо других файлов (которые будут аудиофайлами).
def upload_to(instance, filename):
# Check for image or sound file and put in appropriate directory
if isinstance(instance, models.ImageField):
print("detected image file")
return "x/img/%s" % (filename)
else:
print("detected non-image file")
return "x/aud/%s" % (filename)
class Tile(models.Model):
image = models.ImageField(upload_to=upload_to, default="../static/x/img/default.svg")
sound = models.FileField(upload_to=upload_to, null=True, blank=True)
Последнее условие в upload_to некорректно, я понимаю, так как instance - это экземпляр объекта tile со всеми полями, но я не уверен, что нужно сделать в функции upload_to, чтобы узнать, является ли файл, только что загруженный пользователем, ImageField или FileField.
Можно ли иметь две отдельные функции upload_to
, по одной для каждого типа поля/файла?
def upload_to_image(instance, filename):
return "x/img/%s" % (filename)
def upload_to_sound(instance, filename):
return "x/aud/%s" % (filename)
class Tile(models.Model):
image = models.ImageField(upload_to=upload_to_image, default="../static/x/img/default.svg")
sound = models.FileField(upload_to=upload_to_sound, null=True, blank=True)
На самом деле, если вам просто нужны отдельные каталоги для каждого типа поля, похоже, что вы можете передать это непосредственно в поле upload_to
:
class Tile(models.Model):
image = models.ImageField(upload_to="x/img/", default="../static/x/img/default.svg")
sound = models.FileField(upload_to="x/aud/", null=True, blank=True)
и полностью опустить функции обратного вызова.