gpt4 book ai didi

django-crispy-forms - Django 脆皮形式不显示 FileExtensionValidator 的错误消息

转载 作者:行者123 更新时间:2023-12-03 21:06:12 24 4
gpt4 key购买 nike

  • 包版本:1.7.2
  • Django 版本:2.1
  • Python 版本:3.7
  • 模板包:Bootstrap4

  • 我的模型中有一个 FileField,我实现了 Django 的 FileExtensionValidator,以及我自己的自定义字段验证器来检查文件大小。它可以工作,但是当这些验证失败时,crispy-forms 不会显示错误消息。

    模型
    from django.core.validators import FileExtensionValidator

    class Project(models.Model):
    owner = models.ForeignKey(
    settings.AUTH_USER_MODEL,
    on_delete=models.CASCADE,
    related_name='projects',
    )
    title = models.CharField(
    _('project name'),
    max_length=100,
    help_text=_('Required. 100 characters or fewer.'),
    )
    slug = models.SlugField(
    _('slug'),
    max_length=80,
    )
    created = models.DateTimeField(
    _('dateTime created'),
    auto_now_add=True,
    )
    xmlfile = models.FileField(
    _('input file'),
    upload_to=user_directory_path,
    validators=[FileExtensionValidator(allowed_extensions=('xml',))],
    help_text=_('Required. Please upload an XML file.'),
    )

    形式
    from django.core.exceptions import ValidationError

    def file_size(value):
    limit = 9 * 1024 * 1024
    if value.size > limit:
    raise ValidationError('File too large. Size should not exceed 9 MiB.')

    class ProjectForm(forms.ModelForm):

    xmlfile = forms.FileField(
    label='XML File Upload',
    widget=forms.FileInput(attrs={'accept':'application/xml'}),
    validators=[file_size],
    )

    class Meta:
    model = Project
    widgets = {
    'owner': HiddenInput(),
    }

    模板
    {% block content %}
    <h1>New Project</h1>
    <form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
    {{ form|crispy }}
    <input type="submit" value="Create" />
    </form>
    {% endblock content %}

    看法
    class ProjectCreate(CreateView):
    form_class = ProjectForm
    model = Project
    template_name = 'project_new.html'
    success_url = reverse_lazy('my_projects_list')

    def get_initial(self):
    initial = super().get_initial()
    initial['owner'] = self.request.user
    return initial

    当尝试上传小于 9M 的 XML 文件时,它会起作用并且用户被带到成功 URL。但是当文件格式或文件大小错误时,我们继续停留在project_new.html页面是正确的,但在此页面上没有显示与FileExtensionValidator或file_size()相关的错误信息。

    当我改变 {{ form|crispy }}{{ form.as_p }} ,验证错误将显示在屏幕上。您知道如何在使用 {{ form|crispy }} 时显示验证错误消息吗? ?谢谢!

    最佳答案

    根据脆皮文档 :
    '默认情况下,当 django-crispy-forms 遇到错误时,它会静默失败,记录它们并在可能的情况下继续工作。已添加名为 CRISPY_FAIL_SILENTLY 的设置变量,以便您可以控制此行为。如果您想引发异常而不是记录,告诉您在 Debug模式下开发时发生了什么,您可以将其设置为:

    CRISPY_FAIL_SILENTLY = not DEBUG 
    此外,您可以在此处检查其他错误属性(文档):
    https://django-crispy-forms.readthedocs.io/en/d-0/tags.html#helper-attributes-you-can-set

    关于django-crispy-forms - Django 脆皮形式不显示 FileExtensionValidator 的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54874086/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com