Я не могу экспортировать изображение в CSV файл в Django Admin
Каждый раз, когда я экспортирую данные, все они экспортируются, но для изображения, которое там есть, я получаю только url изображения, а не фактическое изображение. Изображение экспортированного CSV файла
Поля базы данных, откуда я ее экспортирую
Я хочу, чтобы в CSV-файл экспортировалось фактическое изображение, а не путь хранения изображения. Если кто-нибудь знает, как это сделать, пожалуйста, помогите.
Чтобы экспортировать изображение в CSV-файл из Django Admin, вам нужно переопределить метод to_csv класса ModelAdmin для модели, имеющей поле image.
Вот пример того, как это можно сделать:
from django.http import HttpResponse
from django.utils.translation import gettext as _
from django.contrib import admin
class MyModelAdmin(admin.ModelAdmin):
def to_csv(self, request, queryset):
# Create a HttpResponse object with the appropriate CSV header
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=
{}.csv'.format(self.model._meta.verbose_name)
# Create a CSV writer
writer = csv.writer(response)
# Write the headers
headers = [field.name for field in self.model._meta.fields]
writer.writerow(headers)
# Write the rows
for obj in queryset:
# Get the image data
image_data = obj.image.file.read()
# Encode the image data as base64
image_data_base64 = base64.b64encode(image_data).decode()
# Write the row to the CSV file
writer.writerow([image_data_base64] + [getattr(obj, field) for
field in headers[1:]])
return response
to_csv.short_description = _("Export CSV")
# Register the model with the custom ModelAdmin class
admin.site.register(MyModel, MyModelAdmin)
Этот код определяет пользовательский метод to_csv для класса MyModelAdmin, который экспортирует данные изображения как строку в кодировке base64. Данные изображения считываются из поля image модели, которое предположительно является FileField или его подклассом. Затем данные изображения в кодировке base64 добавляются к строкам...
Надеюсь, это поможет!
Вы не можете сохранить файлы в базе данных, а можете сохранить только адрес, где они хранятся. Но есть один способ - преобразовать файлы в формат base64 и сохранить их как строку или текст.