Мой код генерирует Pandas фреймов данных. Они большие. Я сохраняю их как файлы. Для этого я создал Model
:
models.py:
class TargetFiles(models.Model):
owner = models.CharField(max_length=25)
csv_file = models.FileField(blank=True, upload_to='target')
file_name = models.CharField(max_length=255)
settings.py:
...
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
mycode.py:
file_content = df.to_csv(index=False, encoding='utf-8')
csvname = 'target1.csv'
csf = ContentFile(file_content, csvname)
TargetFiles.objects.create(owner=self.user, csv_file=csf, file_name=csvname)
urls.py (проект):
from django.urls import include, path
from django.contrib import admin
urlpatterns = [
path('dataapp/', include('dataapp.urls')),
]
urls .py (dataapp):
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='dataapp'),
path('welcome/', views.welcome_dataapp, name='welcome_dataapp'),
path('download/<str:file_name>', views.download, name='download'),
]
Я не знаю, является ли это лучшим подходом к решению проблемы. Эта документация сделала меня скептиком. Дело в том, что мой код правильно генерирует файл и сохраняет его в каталоге MEDIA_ROOT
. Но когда я go для просмотра администратором и щелкаю на объекте TargetFiles
, ссылка на файл возвращает эту ошибку:
Текущий путь media/target/target1.csv
не соответствует ни одному из них.
Так как я не эксперт по Django, я думаю, что что-то не так. Может быть, в settings.py или в urls.py (в этом файле я не писал никаких ссылок на носители, возможно, именно в этом и заключается ошибка).
Я уже прочитал эти сообщения: Django - как создать файл и сохранить его в FileField модели? , Django: сгенерировать CSV-файл и сохранить его в FileField , а назначить полученный CSV-файл django модель . Но я не смог сделать ссылку администратора на файл MEDIA_ROOT
.
У кого-нибудь есть идеи?
Заранее спасибо.