Как загрузить файлы в BinaryField с помощью виджета FileField в администраторе Django?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как загрузить файлы в BinaryField с помощью виджета FileField в администраторе Django?

Сообщение Anonymous »

Я хочу создать журнал изменений модели и сделать его доступным для редактирования на странице администратора. Вот как это определено в models.py:

Код: Выделить всё

class Changelog(models.Model):
id = models.AutoField(primary_key=True, auto_created=True)
title = models.TextField()
description = models.TextField()
link = models.TextField(null=True, blank=True)
picture = models.BinaryField(null=True, blank=True)
и описание являются обязательными, ссылка и изображение не являются обязательными. Я хотел сделать эту модель максимально простой, поэтому выбрал BinaryField вместо FileField. В этом случае мне не нужно будет беспокоиться об отдельной папке, которую нужно создать резервную копию, поскольку БД будет автономной (Мне не нужно хранить имя файла или какие-либо другие атрибуты, только содержимое изображения) .

Я быстро понял, что у администратора Django нет виджета для BinaryField, поэтому я попробовал использовать виджет для FileField. Вот что я сделал для этого(

Код: Выделить всё

admin.py
):

Код: Выделить всё

class ChangelogForm(forms.ModelForm):

picture = forms.FileField(required=False)

def save(self, commit=True):
if self.cleaned_data.get('picture') is not None:
data = self.cleaned_data['picture'].file.read()
self.instance.picture = data
return self.instance

def save_m2m(self):
# FIXME: this function is required by ModelAdmin, otherwise save process will fail
pass

class Meta:
model = Changelog
fields = ['title', 'description', 'link', 'picture']

class ChangelogAdmin(admin.ModelAdmin):
form = ChangelogForm

admin.site.register(Changelog, ChangelogAdmin)
Как видите, это немного хакерски. Вы также можете создать собственное поле формы, создав подкласс form.FileField, но код будет практически таким же. У меня все работает нормально, но теперь я думаю, есть ли лучший/стандартный способ выполнить ту же задачу?

Подробнее здесь: https://stackoverflow.com/questions/466 ... ango-admin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»