用&#34生成输入标签;接受"使用FileField以Django形式的属性

时间:2014-08-27 21:37:51

标签: django django-forms

我想创建一个表单来上传和保存iOS Safari中的视频,它支持"接受"输入标记的属性,例如:

<input type=file accept="video/*">

可让您拍摄并上传新视频或在设备上选择视频文件。

我在https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.FileField

查看了Django文档

但不知道我可以在哪里指定&#34;接受&#34;输入属性。这可能吗?我可以在模板中创建输入标记并仍然使用Django表单处理来接受文件吗?

4 个答案:

答案 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()也有效。