标签: form-fields

Django:如何为允许多个文件上传的字段编写一个干净的方法?

我有一张上传图片的表格.

如果我遵循Django的标准来清理表单的特定字段属性,那么这就是我的clean方法通常的样子:

class UploadImagesForm(forms.Form):
    image = forms.FileField()

    def clean_image(self):
        file = self.cleaned_data['image']
        if file:
            if file._size > 15*1024*1024:
                raise forms.ValidationError("Image file is too large ( > 15mb ).")
            return file
        else:
            raise forms.ValidationError("Could not read the uploaded file.")
Run Code Online (Sandbox Code Playgroud)

但是,我正在使用一个允许一次上传多个图像的表单,所有这些都通过相同的小部件(即,用户可以按住Shift并单击以选择文件浏览器上的多个文件).因此,每当我需要访问视图或处理程序中的文件时,我都会使用类似于request.FILES.getlist('images')for循环的东西.我该怎么办这个领域的干净方法?我迷路了.

这是我的表格的样子.

class UploadImagesForm(forms.Form):
    images = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': 'multiple'}))
Run Code Online (Sandbox Code Playgroud)

我想要字段的干净方法来检查提交每个文件的文件大小,如上面第一段代码所示.

python forms django django-forms form-fields

2
推荐指数
1
解决办法
3411
查看次数

如何根据 Django 中的用户从 CreateView 中删除字段?

我创建了一个 CBV,我想根据用户删除其中的一个或多个字段。这个想法是一个工作场所,如果登录用户是招聘人员,employer则应包括该字段,否则应排除该字段。

表格.py

class JobCreationForm(forms.ModelForm):
    class Meta:
        model = Job
        # exclude = ['posted', 'provider', 'ext_id']
        fields = ('title',
                'job_desc', 
                'agency_name',
                'employer', 
                'contact_name',
                )
Run Code Online (Sandbox Code Playgroud)

视图.py

class JobCreateView(LoginRequiredMixin, CreateView): 
    template_name = 'job/job.html'
    form_class = JobCreationForm
    success_url = '/'

    def get_context_data(self, **kwargs):
        context = super(JobCreateView, self).get_context_data(**kwargs)
        # import the Customers of this Company
        self.fields["agency_name"].remove()
        recruiter = self.request.user
        self.fields["contact_name"].queryset = Profile.objects.filter(user_id = self.request.user)
        # if the user is a recruiter, delete the employer field.
        if Company.objects.filter(user_id = self.request.user).values('is_recruiter') == False:
            pass …
Run Code Online (Sandbox Code Playgroud)

python django form-fields django-class-based-views

2
推荐指数
1
解决办法
2002
查看次数

如何将我所需字段的星号放在我的标签上?(Symfony形式)

我正在研究Symfony 3,我的表格有些问题.

当我创建一个不需要字段的Symfony表单时,这是我的代码:

我创建了表单:

$form = $this->createFormBuilder()
  ->add('prenom' TextType::class, array(
    'label'    => 'Votre prénom',
    'required' => false
  )
  ->getForm();
Run Code Online (Sandbox Code Playgroud)

以下是我对此字段的视图中的代码:

{{ form_label(form.prenom) }}
{{ form_errors(form.prenom) }}
{{ form_widget(form.prenom) }}
Run Code Online (Sandbox Code Playgroud)

这是我的HTML:

<label class="control-label" for="contact_prenom">Votre prénom</label>
<input type="text" id="contact_prenom" name="contact[prenom]" class="form-control"/>
Run Code Online (Sandbox Code Playgroud)

现在如果我没有'require' => false在我的FormBuilder上做同样的事情,这里是我得到的HTML:

<label class="control-label required" for="contact_prenom">Votre prénom</label>
<sup class="required" title="Champ obligatoire">
        <i class="fa fa-asterisk"></i>
</sup>
<input type="text" id="contact_prenom" name="contact[prenom]" required="required" class="form-control" />
Run Code Online (Sandbox Code Playgroud)

是否可以控制"sup"标签,以便星号*可以与我的标签一起使用?

我想我可以用jQuery来做,但是我想知道是否可以在我的表单构建器或Twig中执行它?

forms required symfony form-fields

1
推荐指数
1
解决办法
5230
查看次数

在基本的Shopify联系表单上出现错误后保留表单数据

我已添加了Shopify文档中描述的基本联系表单.

我的代码:

{% form 'contact' %}

{% if form.posted_successfully? %}
<div class="successForm feedback">
  <p>Thanks for contacting us. We'll get back to you as soon as possible.</p>
</div>
{% endif %}

{% if form.errors %}
<div class="errorForm feedback">
  <p>Sorry, we were unable to submit your inquiry because it contained {{ form.errors | size | pluralize: 'an error', 'a few errors' }}.<br/>Please correct the following and submit again:</p>
  {% for field in form.errors %}
  <p><strong>The {{ field | capitalize | …
Run Code Online (Sandbox Code Playgroud)

form-data shopify contact-form form-fields

0
推荐指数
1
解决办法
1588
查看次数