Сохранение файла Django в sqlite3 db и извлечение

Ниже представлена ​​модель моего устройства:

class Device(models.Model):
    device_type         = models.ForeignKey(DeviceType,to_field='device_type')
    serial_number       = models.CharField(max_length=200,unique=True)
    in_use_by           = models.ForeignKey(User,to_field='username')
    brand               = models.CharField(max_length=200,default="-", null=False)
    model               = models.CharField(max_length=200,default="-", null=False)
    type_number         = models.CharField(max_length=200,blank=True,null=True, default = None)
    mac_address         = models.CharField(max_length=200,blank=True,null=True, default = None)
    invoice             = models.FileField(upload_to='', null=True)

Здесь поле счета-фактуры не используется для меня на моем веб-сайте, но оно полезно мне как администратору. Что я в основном пытаюсь сделать, так это, если запрос устройства будет принят, я загружу счет-фактуру устройства в свою базу данных sqlite с помощью панели администратора. Я новичок в Django и, следовательно, мне нужна помощь для этой цели. Кроме того, я буду загружать файл только через администратора django. Как мне этого добиться? Что я должен написать в параметре upload to, чтобы файл сохранялся в базе данных?


person Aishwary Shukla    schedule 11.06.2018    source источник
comment
Вам не нужно ничего делать. Как только вы включите свою модель в панели администратора, как показано в руководстве, вы сможете загружать свои файлы.   -  person Daniel Roseman    schedule 11.06.2018
comment
А для скачивания нужен какой-то специальный функционал?   -  person Aishwary Shukla    schedule 11.06.2018
comment
Вы не храните сам файл в базе данных. Сохраните файл на диске и путь к нему в базе данных. Тогда загрузка - это просто построение ссылки из пути.   -  person thebjorn    schedule 11.06.2018
comment
Но если я хочу сохранить в базе данных, как этого можно добиться?   -  person Aishwary Shukla    schedule 11.06.2018
comment
Почему вы хотите это сделать? Это неэффективно и ненужно, особенно с sqlite db, который в любом случае является просто файлом в файловой системе.   -  person Daniel Roseman    schedule 11.06.2018
comment
Я просто хочу иметь знания об этом материале. поэтому я и спрашивал об этом.   -  person Aishwary Shukla    schedule 11.06.2018


Ответы (1)


Вам нужно настроить администратора с обязательными полями, которые вы хотите редактировать.

В admin.py:

class DeviceAdmin(admin.ModelAdmin):
    fields = ('device_type', 'invoice', ..)

admin.site.register(Device, DeviceAdmin)

справочник по полям администратора Django

ИЗМЕНИТЬ:

Параметр upload_to — это путь, по которому вам нужно сохранить файл. Как правило, это путь MEDIA_ROOT, указанный в настройках Django.

models.FileField(upload_to=settings.MEDIA_ROOT, null=True)

Чтобы служить этому во время разработки:

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Ссылка

В БД будет храниться только URL файла.

person Pranav Aggarwal    schedule 11.06.2018
comment
Но что нужно передать в параметре upload_to в FileField, чтобы мой файл сохранялся в sqlite3 db? - person Aishwary Shukla; 11.06.2018
comment
Параметр upload_to предназначен для каталога, в котором вы хотите сохранить файл. И путь должен исходить из файла settings.py. Когда вы получите это поле, оно даст вам URL-адрес файла. - person Pranav Aggarwal; 11.06.2018
comment
Хорошо, должен быть какой-то способ хранить файлы в БД, верно? - person Aishwary Shukla; 11.06.2018
comment
Отредактировал ответ для FileField. Django FileField хранит только ссылку. Если вам нужно сохранить файл в БД, вам нужно посмотреть на хранение BLOB-объектов в БД. Для чего вам нужно создать настраиваемое поле, зависящее от вашей БД. См.: stackoverflow.com/questions/4915397/django-blob-model- поле - person Pranav Aggarwal; 11.06.2018