将文件输入用于文本字段?
Use a file input for a text field?
我有一个带有 TextField 的 Django 模型。当我使用 ModelForm 向 add/edit 这个模型收集数据时,我得到了一个 HTML 形式的文本区域,但我想改用文件输入。
我认为我需要做的是使用 django.forms.FileInput 或该输入的子 class 在我的表单 class 上设置此字段的小部件,但它我不清楚如何进行这项工作(而且我不认为这是正确的方法)。
那么,如何使用文件输入为使用 ModelForm 的模型收集数据?
以下是我想出的,为简洁起见省略和浓缩:
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(), ...}
我有一个带有 TextField 的 Django 模型。当我使用 ModelForm 向 add/edit 这个模型收集数据时,我得到了一个 HTML 形式的文本区域,但我想改用文件输入。
我认为我需要做的是使用 django.forms.FileInput 或该输入的子 class 在我的表单 class 上设置此字段的小部件,但它我不清楚如何进行这项工作(而且我不认为这是正确的方法)。
那么,如何使用文件输入为使用 ModelForm 的模型收集数据?
以下是我想出的,为简洁起见省略和浓缩:
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(), ...}