我想创建一个表单来上传和保存iOS Safari中的视频,它支持"接受"输入标记的属性,例如:
<input type=file accept="video/*">
可让您拍摄并上传新视频或在设备上选择视频文件。
我在https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.FileField
查看了Django文档但不知道我可以在哪里指定&#34;接受&#34;输入属性。这可能吗?我可以在模板中创建输入标记并仍然使用Django表单处理来接受文件吗?
答案 0 :(得分:3)
没有简单的方法可以做到这一点,你可以看到一些好的答案in this question 此外,个人建议(未经测试):创建表单后,在此设置您想要的任何属性
for f in form.fields:
if isinstance(form.fields[f].widget, ClearableFileInput):
form.fields[f].widget.attrs['accept'] = 'video/*'
答案 1 :(得分:3)
易。在您的模型表单中,只需确保使用所需的FileInput
HTML属性创建accept
窗口小部件:
from django import forms
class VideoForm(forms.ModelForm):
class Meta:
model = Video
exclude = []
widgets = {
'video_file': forms.FileInput(attrs={'accept': '.mov,video/quicktime'}),
}
答案 2 :(得分:1)
创建一个带有accept
参数
class AcceptingFileField(FileInput):
def __init__(self, attrs=None, accept=['audio/*']):
final_attrs = {}
if accept:
final_attrs = {'accept': ','.join(accept)}
if attrs is not None:
final_attrs.update(attrs)
super(AcceptingFileField, self).__init__(attrs=final_attrs)
然后你就进入ModelForm
widgets = {
'myvideoformfield': AcceptingFileField(accept=['video/*'])
}
答案 3 :(得分:0)
您还可以通过在表单中包含单行代码来完成一个简单的步骤:
App\User::select('*')
->from(\DB::raw("(select
low.*,
low.`date` as date_start,
high.`date` as date_end,
to_days(high.`date`) - to_days(low.`date`) as day_gap,
period_diff(date_format(high.`date`, '%Y%m'),
date_format(low.`date`, '%Y%m')) as month_gap
from reports low, reports high
where high.`date` =
(select
min(`date`)
from reports
where
`date` > low.`date`
and low.user_id = high.user_id
)
) as d")
)->get();
设置django前端输入元素上的accept属性。 注意:这对form.ImageField()也有效。