У меня проблема со вставкой изображений в базу данных django

вот моя модель:

from django.db import models


class Topic(models.Model):
    name = models.CharField(max_length=200)
    
    def __str__(self):
        return self.name
    

class Article(models.Model):
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE) 
    title = models.CharField(max_length=6000)

    featured_image = models.ImageField(null=True,blank=True, default="default.jpg") 
                                                            # i want to add this filed
    content = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 

    def __str__(self):
        return self.title

я установил python -m pip install pillow и вот моя конфигурация настроек:

 import os  

STATIC_URL = '/static/'  

STATICFILES_DIRS = [     
    BASE_DIR / 'static'  
]

в панели администратора я ожидаю появления featured image filed, который устанавливает изображение с default.jpg

если при создании статьи админ не вставляет изображение.

После запуска python manage.py makemigrations он всегда выдает следующее:

Невозможно изменить нулевое поле 'topic' в статье на ненулевое без указания значения по умолчанию. Это связано с тем, что базе данных нужно чем-то заполнить существующие строки.

Пожалуйста, выберите вариант исправления:

  1. Предоставить одноразовое значение по умолчанию сейчас (будет установлено для всех существующих строк с нулевым значением этого столбца)

  2. Пока игнорировать. Существующие строки, содержащие NULL-значения, придется обрабатывать вручную, например, с помощью операции RunPython или RunSQL.

  3. Выйдите и вручную определите значение по умолчанию в models.py.

Выберите опцию:

Независимо от того, что я выбираю, я все равно не вижу файла в админке Django

Таким образом, STATIC_URL и STATIC_ROOT отличаются от MEDIA_URL и MEDIA_ROOT, которые вам нужно использовать для загрузки. В связи с этим приведем пример, который поможет вам начать работу.

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media' # directory where media files will be stored.

urls.py

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

# you might want to add STATIC_URL and STATIC_ROOT here also so static assets are served.

Добавляя static() к urlpatterns, вы разрешаете django обслуживать медиа-активы.

Обратите внимание, что это решение для локальной разработки, в производстве вы должны перегрузить его на nginx или другой сервер.

Если вам нужно "изображение по умолчанию", теперь вы можете добавить стандартный jpeg в папку media, и он будет использоваться в тех случаях, когда вы не загружаете файл.

Вернуться на верх