Forms Generated
生成式表单

Generated forms turn a tagged struct into a working editor. Option-provider methods and list-level overrides let you keep the generated form while still adapting it to runtime data.

生成式表单会把带 tag 的结构体变成可工作的编辑器。字段选项方法和列表级覆盖让你既保留生成式体验,又能适配运行时数据。
paw.Gen()paw.KvConvert()paw.List.SelectOptions()paw.List.BitMaskOptions()paw.List.Readonly()
Covered APIs
涵盖 API
API
接口
Description
说明
Gen(struct)
Generates a List of controls from exported struct fields with paw tags.
根据带 paw tag 的导出字段生成控件列表。
KvConvert(map[string]string, *struct)
Writes submitted values back into a struct, including time and sql.Null* values.
把提交值写回结构体,包括时间类型和 sql.Null* 类型。
List.SelectOptions(...)
Overrides or injects Select options by field name.
按字段名覆盖或注入 Select 选项。
List.BitMaskOptions(...)
Overrides or injects BitMask options by field name.
按字段名覆盖或注入 BitMask 选项。
List.RichTextEditorConfig(...)
Applies upload config to generated rich text editor fields.
为生成式富文本字段应用上传配置。
List.Readonly()
Transforms generated controls into a display-only view.
把生成出的控件转换成只读展示视图。
Minimal Example: Generate a CRUD form from a struct
最小示例:从结构体生成 CRUD 表单

Field tags define the widget type, labels, and time formatting while PawOptions methods provide default options.

字段 tag 定义控件类型、标签和时间格式,而 PawOptions 方法提供默认选项。
Permissions

type MemberForm struct {
	ID          uint           `paw:"hidden"`
	Name        string         `paw:"" pawLabel:"Name"`
	Role        string         `paw:"select" pawLabel:"Role"`
	Enabled     bool           `paw:"" pawLabel:"Enabled"`
	Permissions uint64         `paw:"bitmask" pawLabel:"Permissions"`
	Notes       string         `paw:"textarea:120" pawLabel:"Notes"`
	ReviewDate  time.Time      `paw:"" pawLabel:"Review date" pawTimeFormat:"2006-01-02"`
	Owner       sql.NullString `paw:"" pawLabel:"Owner"`
}

func (MemberForm) RolePawOptions() []paw.SelectOption { ... }
func (MemberForm) PermissionsPawOptions() []paw.BitMaskOption { ... }

paw.Form{Body: paw.Gen(member)}
Advanced Example: Convert submitted values and override generated options
进阶示例:回填提交值并覆盖生成选项

KvConvert round-trips submitted values into a struct, while list-level helpers adapt generated controls to runtime data.

KvConvert 负责把提交值回填到结构体,列表级 helper 则负责把生成控件适配到运行时数据。
Readonly view after KvConvert
KvConvert 之后的只读视图
Permissions
Updated from submitted values.
Runtime select and bitmask overrides
运行时选择项和位掩码覆盖
Permissions
Generated editor upload config
生成式编辑器上传配置
Body

converted := MemberForm{}
paw.KvConvert(map[string]string{
	"Name":        "Grace Hopper",
	"Role":        "admin",
	"Permissions": "7",
	"ReviewDate":  time.Now().Format(paw.TimeFormatDate),
}, &converted)

readonly := paw.Gen(converted).Readonly()

generated := paw.Gen(member).
	SelectOptions(map[string][]paw.SelectOption{...}).
	BitMaskOptions(map[string][]paw.BitMaskOption{...})

editor := paw.Gen(article).
	RichTextEditorConfig(paw.RichTextEditorConfig{
		UploadServer:      "/AttachmentUpload",
		UploadFieldName:   uploadFieldName,
		UploadMaxFileSize: uploadFileMaxSize,
	})
Notes and Related Docs
说明与相关文档

Notes

说明

Fields without a paw tag are ignored, and unexported fields are ignored as well.

没有 paw tag 的字段会被忽略,未导出字段同样会被忽略。

Option-provider methods follow the FieldName + PawOptions naming convention and can use either value or pointer receivers.

选项提供方法遵循 FieldName + PawOptions 命名约定,并且既支持值接收者,也支持指针接收者。

KvConvert supports time.Time, *time.Time, sql.NullTime, sql.NullBool, sql.NullString, sql.NullFloat64, sql.NullInt16, sql.NullInt32, and sql.NullInt64 in addition to the basic scalar types.

除基础标量类型外,KvConvert 还支持 time.Time、*time.Time、sql.NullTime、sql.NullBool、sql.NullString、sql.NullFloat64、sql.NullInt16、sql.NullInt32 和 sql.NullInt64。

Related Pages

相关页面
Forms Basic
基础表单
Use manual form controls when model-driven generation is not the right fit.
当模型驱动生成不适合时,直接使用手写表单控件。
Rich Text Editor
富文本编辑器
Configure HugeRTE-backed rich text fields and wire image/video uploads into a normal Paw form.
配置基于 HugeRTE 的富文本字段,并把图片和视频上传接入普通 Paw 表单。
Source and References
源码与参考资料