Django 表单验证消息未显示

2024-05-08

我试图限制可以以表单上传的文件类型、大小和扩展名。该功能似乎有效,但未显示验证错误消息。我意识到if file._size > 4*1024*1024可能不是最好的方法 - 但我稍后会处理这个问题。

这是 forms.py:

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ['name', 'description', 'url', 'product_type', 'price', 'image', 'image_url', 'product_file']
        labels = {
            'name': 'Product Name',
            'url': 'Product URL',
            'product_type': 'Product Type',
            'description': 'Product Description',
            'image': 'Product Image',
            'image_url': 'Product Image URL',
            'price': 'Product Price',
            'product_file': 'Product Zip File',
        }
        widgets = {
            'description': Textarea(attrs={'rows': 5}),
        }

    def clean(self):
        file = self.cleaned_data.get('product_file')

        if file:
            if file._size > 4*1024*1024:
                raise ValidationError("Zip file is too large ( > 4mb )")
            if not file.content-type in ["zip"]:
                raise ValidationError("Content-Type is not Zip")
            if not os.path.splitext(file.name)[1] in [".zip"]:
                raise ValidationError("Doesn't have proper extension")

                return file
            else:
                raise ValidationError("Couldn't read uploaded file")

...这是我用于该表单的视图:

def post_product(request):
    # if this is a POST request we need to process the form data
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = ProductForm(data = request.POST, files = request.FILES)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            product = form.save(commit = False)
            product.user = request.user
            product.likes = 0
            product.save()
        # redirect to a new URL:
        return HttpResponseRedirect('/products')

我缺少什么?


在您看来,无论表单是否有效,您都在执行重定向 - 因此 Django 没有地方显示表单错误。

执行此操作的正常方法是在以下情况下重新呈现表单:is_valid() is False:

if form.is_valid():
    # process the data in form.cleaned_data as required
    product.save()
    # redirect to a new URL - only if form is valid!
    return HttpResponseRedirect('/products')
else:
    ctx = {"form": form} 
    # You may need other context here - use your get view as a template
    # The template should be the same one that you use to render the form
    # in the first place.
    return render(request, "form_template.html", ctx}

您可能需要考虑使用基于类的FormView https://docs.djangoproject.com/en/2.0/ref/class-based-views/generic-editing/#formview为此,它处理重新呈现有错误的表单的逻辑。这比编写两个单独的 get 和 post 视图来管理表单更简单、更容易。即使您不这样做,使用一个视图来处理表单的 GET 和 POST 也会更容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 表单验证消息未显示 的相关文章

  • Heroku 上的 Django 翻译无法完全正常工作

    我在 Heroku 上部署了 Django 应用程序 并添加了https github com piotras heroku buildpack gettext git此 ugettext 构建包和应用程序的某些部分已注释翻译 本地可以用
  • 如何处理 Django 中的错误

    我想让我的 django 应用程序尽可能对用户友好 并且我想处理适当的错误并让它推出类似于 javascript 中的警报的错误消息 我想在没有上传文件时执行此操作 因此 当按下上传按钮并且尚未上传任何内容时 将会发出一条警报消息 我的看法
  • QDataWidgetMapper;将 TableWidget 映射到模型

    我没有找到任何文档显示 QDataWidgetMapper 实际上适用于哪些小部件 也没有找到任何使用 QTableWidget 进行映射的实现 它绝对适用于 QLineEdit 和 QComboBoxes 它们是输入小部件 但是是否可以映
  • 如何从 Django 管理界面禁用“最近操作”小部件?

    我不想展示最近的操作小部件在 django 管理站点中 我不知道如何完成此操作 你可以覆盖admin index html禁用显示的模板 有 您可能想要更改 删除的侧边栏块 有条件地启用或禁用操作 ModelAdmin get action
  • Django内联外键与父主键不匹配

    我需要一些帮助来解决使用内联表单的 django 错误 我似乎无法弄清楚这一点 如果我能在尝试验证之前弄清楚如何执行此操作 我可能可以强制插入 eventID 当我提交表单时 出现错误 Hidden field event The inli
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • JQuery:将 FormData 和 csrf 令牌一起发布

    Is the data 下面的行正确吗 我想将表单数据和 csrf 令牌发布到 Django 视图函数 file upload on change function var currentpath window location pathn
  • Django:重写表单中的 clean() 方法 - 关于引发错误的问题

    我一直在 clean 方法中做这样的事情 if self cleaned data type organized by self cleaned data organized by raise forms ValidationError T
  • 使用 Django 重定向和 HttpResponseRedirect 有什么区别?

    一般用哪个比较好 https docs djangoproject com en dev topics http shortcuts redirect https docs djangoproject com en dev topics h
  • 在 Laravel 中的编辑表单上获取选定选项

    我的网站订单有一个可编辑的表单 并且有以下字段 User quantity note status 我在此表单中还有其他选项 但只有这些字段对我来说很重要 以便能够获取默认值 例如 我希望能够查看用户默认订购的数量 然后我可以更改它或保留它
  • 如何使用 Django HttpResponseRedirect 提供规范 URL?

    这个问题和我刚才问的很相似href 我可以获取 Google 搜索结果来使用 显示最终重定向网址吗 https stackoverflow com questions 22728433 href can i get google searc
  • EditorTemplate 的嵌套模型的 ASP.NET MVC3 条件验证

    假设你有一个 viewModel public class CreatePersonViewModel Required public bool HasDeliveryAddress get set Should only be valid
  • str.translate 与 str.replace - 何时使用哪一个?

    何时以及为什么使用前者而不是后者 反之亦然 目前尚不完全清楚为什么有些人使用前者以及为什么有些人使用后者 它们有不同的目的 translate只能用任意字符串替换单个字符 但一次调用可以执行多次替换 它的参数是一个特殊的表 它将单个字符映射
  • 在 django 中自定义项目和应用程序模板

    我想自定义运行时创建的文件和文件夹 python manage py startapp appname 我发现一遍又一遍地做一些事情 我认为如果在创建新应用程序时存在我的自定义功能 那就太好了 您知道创建应用程序时可以在哪里自定义默认文件吗
  • 如何在Windows中的Python 3.9下pip安装pickle?

    我需要pickle https docs python org 3 9 library pickle html module pickle包安装在我的下面Python 3 9在 Windows 10 下 我尝试过的 当尝试与pip inst
  • Django 多对多关系(类别)

    我的目标是向我的 Post 模型添加类别 我希望以后能够按不同类别 有时是多个类别 查询所有帖子 模型 py class Category models Model categories 1 red 2 blue 3 black title
  • 如何在Django终端后台启动celery

    我开始芹菜作为 python manage py celeryd 它正在工作 但在前台 然后为了测试命令 我需要启动另一个终端并在那里执行操作 有什么办法可以在后台启动它吗 我试过这个 python manage py celeryd 但话
  • 无法导入QUERY_TERMS

    我正在运行一个网站Python and Django Django filters 2 1 installed Django 2 1 installed 当我运行时 我收到以下错误 importError Could not import
  • 水平对齐输入字段

    我正在尝试获取一个输入字段 并且它与同一水平线上的关联提交按钮相关 但事实证明这是一个挑战 这是我的代码
  • 如何使用 Python/Django 在 Facebook 中获取(和使用)扩展权限

    我正在尝试编写一个简单的应用程序 让用户授予我的代码写入其页面的 Facebook 流的权限 据我了解 它应该很简单 让用户单击一个按钮 启动一个弹出窗口 其中包含我的 Facebook 应用程序中的页面 在该页面中 他们单击授予的内容流发

随机推荐

  • 如何用C语言测量时间?

    我想知道某个代码块执行了多长时间 大约 像这样的事情 startStopwatch do some calculations stopStopwatch printf lf timeMesuredInSeconds How 您可以使用clo
  • Android 中的 ImageView 拖动限制

    我在布局中有一个 ImageView 并在 ImageView 上设置 OnTouchListener 来拖动 ImageView 它工作得很好 我的问题是如何防止将 ImageView 移动到布局范围之外 这是我的代码 活动类别 publ
  • 如何远程调试长时间运行的 python 脚本或服务?

    正如标题所说 我希望能够连接到在 Paster 或 uwsgi 下运行的 python 进程并利用 pdb 功能 Using winpdb http winpdb org 您可以像这样附加到正在运行的进程 插入 import rpdb2 r
  • 如果我将一个大函数声明为内联函数怎么办?

    我搜索了一些相关问题 例如C 中内联函数的好处 https stackoverflow com questions 145838 benefits of inline functions in c 但我还有疑问 如果内联函数只是为了 为编译
  • 通过 Selenium 捕获 JSON 响应

    我正在使用 Selenium IDE 或 webdriver 测试网页 该网页有一个 搜索 功能 基本上只是一个带参数的 GET 调用 javascript 还输出以控制台从搜索调用返回的 JSON 即类似console log data
  • CSS 3假3D立方体在2个盒子之间旋转

    我使用 css 实现了翻转旋转 flip card position relative z index 1 webkit perspective 1000px moz perspective 1000px o perspective 100
  • 如何在反应导航中将道具传递给“屏幕”/组件

    我对一般编程相当陌生 甚至对 JS 和 React Native 还比较陌生 但我已经为此工作了一整天 但我仍然没有弄清楚 所以我求助于 Stack Overflow 希望有人能帮助我可以帮我 基本上我想要完成的是设置其他Component
  • PHP ajax使用新数组上传多个文件

    它是我的上传 html 代码 div class col xs 12 div
  • Nodemon - 使用配置文件指定扩展监视列表

    有没有办法使用配置文件而不是命令行来指定监视列表 Nodemon 文档中的命令行方法 我尝试使用nodemon json配置文件包含以下内容 ext js json hbs html 返回 扩展名匹配 错误 然后我尝试将配置添加到packa
  • 将 Ember 组件附加到不受 Ember 管理的 DOM 元素

    我想附加一个 Ember 组件ComponentB到由某些非 Ember UI 库生成的 DOM 元素didInsertElement of ComponentA 导致类似的结果 div class ember view component
  • 对 exec 行为有什么解释吗? [复制]

    这个问题在这里已经有答案了 寻找此代码为何引发的良好解释SyntaxError def echo x return x def foo s d exec s d return dict x y for x y in d items def
  • Java RMI 通过互联网

    我正在用 Java 开发一个游戏 使用 RMI 进行所有网络通信 RMI 允许我调用服务器上的方法 但这对我来说还不够 我还希望服务器能够在连接的客户端之间传播消息 我的客户端查找服务器 它的接口扩展了远程 并在其上注册 它允许服务器知道谁
  • __declspec(align) 用于多个声明

    抱歉 这个非常简单的问题 无法在谷歌上找到答案 这个声明语法是 declspec align 16 float rF 4 declspec align 16 float gF 4 declspec align 16 float bF 4 相
  • 如何引用 models.py 之外的信号

    在文档中Django 它指定models py是定位信号回调函数的好地方 post save pre save etc 这段代码应该放在哪里 您可以将信号处理和注册代码放在您喜欢的任何地方 但是 您需要确保它所在的模块获取 尽早导入 以便信
  • 使用对象键作为 JSON 架构中的类型

    假设我想根据 Intellij IDEA 中的 JSON 架构验证 YAML 文件 该文件的结构如下 foo command touch tmp a txt I know I don t need this but it s an exam
  • 如何在 C# 中获取我当地时间的 UTC 等效时间

    我的机器处于 PDT 如果我说 DateTime Now 那么我将获得相当于 2012 年 9 月 18 日上午 6 00 00 的当地时间 我想获得此日期时间实例的 UTC 等效值 UTC 时间将比 PDT 早 7 小时 比 PST 早
  • Android - Firebase - 保存新数据而不覆盖旧数据

    创建此问题是因为我之前的问题包含 2 个问题 而不是将其缩小到 1 Aim 用户将能够存储新数据而不会覆盖之前提交的数据 描述 目前 当用户输入新报告时 事件报告节点中的用户事件报告数据将被覆盖 用户发送的旧事件报告中的数据应与新数据一起保
  • JAXB、Marshal 的问题 - 无法封送类型“java.lang.String”

    当我运行 marshal 操作时 出现以下错误 javax xml bind MarshalException with linked exception com sun istack internal SAXException2 unab
  • for 循环中列表项未更改

    当以下代码没有达到我预期的效果时 我感到震惊 lines list this is line 1 n this is line 2 n this is line 3 n for line in lines list line line st
  • Django 表单验证消息未显示

    我试图限制可以以表单上传的文件类型 大小和扩展名 该功能似乎有效 但未显示验证错误消息 我意识到if file size gt 4 1024 1024可能不是最好的方法 但我稍后会处理这个问题 这是 forms py class Produ