SuperAPI AI 工具集

django-forms

编程与开发

查看项目

更新于 10-16 01:57

技能介绍

Django Forms 是一套面向 Django 表单处理的实践模式集合,重点在于把校验逻辑集中在表单层,而不是散落在视图中。

用途 该技能用于指导在 Django 项目中构建表单、实现数据校验、处理表单错误,以及配合 HTMX 完成异步表单提交。

核心理念

  • 优先使用 ModelForm 处理基于模型的表单。
  • 校验逻辑放在表单中,而不是视图中。
  • 始终处理并向用户展示表单错误。
  • 当需要在保存前修改实例时,使用 commit=False。

校验方式 字段级校验(clean_<field>):

  • 校验并转换单个字段。
  • 返回清洗后的值,或抛出 ValidationError。
  • 适用场景:格式检查、唯一性、规范化。

跨字段校验(clean):

  • 首先调用 super().clean()。
  • 通过 cleaned_data 访问多个字段。
  • 使用 self.add_error(field, message) 添加字段级错误。
  • 适用场景:密码确认、条件性必填。

视图集成

  • 显式检查 request.method。
  • POST 请求时用 request.POST 实例化表单,GET 请求时使用空表单。
  • 使用 form.save(commit=False) 设置额外字段(例如作者)。
  • 成功时返回重定向,失败时重新渲染表单。

HTMX 处理

  • 通过 request.headers.get("HX-Request") 判断是否为 HTMX 请求。
  • 成功或出错时返回局部模板以响应 HTMX。
  • 使用 HX-Trigger 响应头通知其他组件。

模板

  • 使用 form.non_field_errors 展示跨字段错误。
  • 使用 field.errors 展示每个字段的错误。
  • 为 HTMX 响应使用局部模板(_form.html)。
  • 通过 hx-indicator 加入加载指示器。

Widgets

  • 在 Meta.widgets 字典中覆盖。
  • 通过 attrs 参数设置 HTML 属性。
  • 常见用法:Textarea(attrs={"rows": 5})、DateTimeInput(attrs={"type": "datetime-local"})。

Formsets

  • 使用 inlineformset_factory 处理关联模型集合。
  • 同时校验表单与 formset:form.is_valid() 和 formset.is_valid()。
  • 编辑已有父对象时传入 instance。

常见陷阱

  • 在视图中而不是表单中做校验。
  • 未检查 is_valid() 就静默重定向。
  • 设置关联字段时忘记使用 commit=False。
  • 未向用户展示表单错误。

限制 该资料未提供具体的安装命令、依赖版本、收费信息或平台支持范围,这些内容暂未提供。