• Django. Как правильно сохранить сгенерированный файл в FileField?

    @sanchemba
    У меня была такая же проблема. Дело в том, что при самостоятельной привязке файла к полю, видимо, нужно отключить генератор имен файлов в поле FileField и/или включать перезапись файлов. Как это сделать, и можно ли вообще, я пока не разобрался. Очевидно, при сохранении экземпляра модели и, соответственно, поля (в Вашем случае qr), проверяется наличие файла по пути указанному в path (а Вы, если я правильно понимаю, это делаете вызывая self.qr.save()). Если указанный путь "занят", файл не перезаписывается, а генерируется новое имя файла.
    Примерно так это работает. Если кто-то подскажет как изменить поведение или переопределить метод save поля FileField, буду очень рад.
    Я же сделал довольно топорно:
    У меня есть отдельный метод, отвечающий за составление имён файлов, который передаётся в поле upload_to и он то и будет определять конечное имя файла.
    В переопределённом методе save() модели я запоминаю путь к файлу, который привязываю к полю FileField. После вызова super(Url, self).save(*args, **kwargs), я просто удаляю временный файл (именно тот, что сам привязывал, а путь к тому, что реально остался определился в методе, передаваемом в upload_to при сохранении модели).
    Я делаю сервис для себя, поэтому мне пока норм. Но при большом потоке файлов это может быть довольно накладно. Так что продолжаю искать лучшие пути...
    Ответ написан
    Комментировать