Django поле модели для изображения в папке c - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь создать модель игры Django с полями для имени, а также обложкой, которая находится в папке stati c приложения.

def game_covers_path():
    return os.path.join(settings.STATIC_URL, 'some_app/games/')


class Game(models.Model):
    name = models.CharField(max_length=100, primary_key=True)
    cover = models.FilePathField(path=game_covers_path, null=True)

    def __str__(self):
        return self.name

My структура папок выглядит следующим образом:

.
├── db.sqlite3
├── my_app
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── some_app
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    ├── models.py
    ├── static
    │   └── some_app
    │       ├── games
    │       │   ├── Counterstrike:\ Global\ Offensive.jpg
    ├── templates
    ├── tests.py
    ├── urls.py
    └── views.py

Но когда я открываю страницу администратора, я получаю следующую ошибку:

FileNotFoundError at /admin/some_app/game/add/
[Errno 2] No such file or directory: '/static/some_app/games/'

Как правильно ссылаться на изображения в папке stati c приложения в базе данных? Также FilePathField проверяет, существует ли файл перед сохранением модели? Потому что я попытался добавить случайные значения, и он сохранил его, но в документации написано, что вы можете выбрать только файл, который уже существует ...

1 Ответ

0 голосов
/ 04 февраля 2020

(слишком долго для комментария)

  1. STATIC_URL - это URL , который будет сопоставлен с STATIC_ ROOT path с помощью Django во время выполнения, поэтому используйте STATIC_ ROOT для создания файла путь

  2. stati c файлы не должны изменяться динамически : css, js, favicon; то, что вы пытаетесь сделать, называется media files в терминах Django, поэтому используйте вместо MEDIA_URL, MEDIA_ ROOT. Также обратите внимание, что файлы stati c можно хранить в папке проекта, файлы media обычно хранятся где-то еще. Они не являются частью вашего проекта / решения - они data .

  3. Чтобы правильно обрабатывать как stati c, так и медиа-файлы, вы должны настроить STATIC_ ROOT , STATIC_URL, MEDIA_ ROOT, MEDIA_URL

Есть десятки вопросов и ответов, связанных с Django stati c и медиа-файлами здесь, на SO, пожалуйста, посмотрите их , И, пожалуйста, взгляните на документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...