Если во время проверки не появляется ошибка MySQL, убедитесь, что вы правильно создали таблицу базы данных. Это случилось со мной. Ищите любые нежелательные запятые или цитаты.
Вероятно, вы прочитали документацию , так что вот простой пример, чтобы сделать его понятным:
def content_file_name(instance, filename):
return '/'.join(['content', instance.user.username, filename])
class Content(models.Model):
name = models.CharField(max_length=200)
user = models.ForeignKey(User)
file = models.FileField(upload_to=content_file_name)
Как вы можете видеть, вам даже не нужно для использования указанного имени файла - вы можете переопределить это в своем upload_to вызываемом тоже, если хотите.
Это действительно помогло. Для немного более краткости, решил использовать лямбда в моем случае:
file = models.FileField(
upload_to=lambda instance, filename: '/'.join(['mymodel', str(instance.pk), filename]),
)
Замечание об использовании значения pk объекта «экземпляр». Согласно документации:
В большинстве случаев этот объект еще не был сохранен в базе данных, поэтому, если он использует AutoField по умолчанию, он может еще не иметь значения для своего первичного ключа поле.
blockquote>Следовательно, справедливость использования pk зависит от того, как определена ваша конкретная модель.