Использовать файл для ввода в текстовое поле?

У меня есть модель Django с TextField. Когда я использую ModelForm для сбора данных для добавления / редактирования этой модели, я получаю текстовую область в форме HTML, но вместо этого я хотел бы использовать ввод файла.

Я думаю, что мне нужно сделать, это установить виджет для этого поля в моем классе формы, используя django.forms.FileInput, или, возможно, подкласс этого ввода, но мне не ясно, как заставить это работать (и я Я не уверен, что это правильный подход).

Итак, как я могу использовать файл ввода для сбора данных для модели с использованием ModelForm?

1 ответ

Решение

Вот то, что я придумал, избрал и сконцентрировался для краткости:

from django.contrib.gis.db.models import Model, TextField
from django import forms

class Recipe(Model):
    source = TextField(null=False, blank=True)
    ...

class AsTextFileInput(forms.widgets.FileInput):
    def value_from_datadict(self, data, files, name):
        return files.get(name).read()

class RecipeForm(forms.ModelForm):
    class Meta:
        model = Recipe
        fields = ('source', ...)
        widgets = {'source': AsTextFileInput(), ...}
Другие вопросы по тегам