Передача идентификатора поля в другое поле той же модели Django - PullRequest
0 голосов
/ 25 апреля 2020

Здравствуйте , я пытаюсь передать идентификатор модели в URL-адрес поля изображения (upload_to), а затем получить к нему доступ через URL-адрес, уникальный для экземпляра.

Вот что я сделал (Amature) ;

class User(models.Model):
   serial = models.AutoField(primary_key=True)
   profile = models.ImageField(upload_to=f"profiles/{serial}/")

Но все, что я получаю, это OSError. Я хотел сохраните файл в каталоге profiles/{serial}/ в приложении. Таким образом, каждый экземпляр модели имеет свой собственный каталог. И затем получить к нему доступ через host:port/api/users/{serial}/profile.jpg Мой набор просмотра обслуживается через host:port/api/users

Есть ли способ сделать это? Любая помощь высоко ценится. Подробное объяснение еще более ценится.

1 Ответ

0 голосов
/ 25 апреля 2020

С https://docs.djangoproject.com/en/3.0/ref/models/fields/#django .db.models.FileField.upload_to

upload_to также может вызываться, например, функцией. Это будет вызвано для получения пути загрузки, включая имя файла. Этот вызываемый объект должен принимать два аргумента и возвращать путь в стиле Unix (с косой чертой) для передачи в систему хранения. Два аргумента: экземпляр и имя файла

Так что вы можете сделать что-то вроде этого

def profile_handler(instance, file_name)
    return f"profiles/{instance.id}/{file_name}"

class User(models.Model):
   serial = models.AutoField(primary_key=True)
   profile = models.ImageField(upload_to=profile_handler)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...