siyuan-note/siyuan · error
new item template field [%s] not found
Error message
new item template field [%s] not found
What it means
normalizeNewItemTemplateFieldValues iterates itemTemplate.FieldValues and looks up each keyID via av.GetKey; if the key is missing (deleted column) or GetKey errored, the field reference is rejected. A template's FieldValues must point at columns that still exist on the AV.
Source
Thrown at kernel/av/new_item_template.go:311
if ret[i].TemplateID != ret[j].TemplateID {
return ret[i].TemplateID < ret[j].TemplateID
}
return ret[i].KeyID < ret[j].KeyID
})
return
}
func (av *AttributeView) normalizeNewItemTemplateFieldValues(itemTemplate *NewItemTemplate) error {
if 0 == len(itemTemplate.FieldValues) {
itemTemplate.FieldValues = nil
return nil
}
fieldValues := map[string]*NewItemFieldValue{}
for keyID, fieldValue := range itemTemplate.FieldValues {
key, err := av.GetKey(keyID)
if nil != err || nil == key {
return fmt.Errorf("new item template field [%s] not found", keyID)
}
if !isNewItemTemplateEditableKeyType(key.Type) {
return fmt.Errorf("new item template field [%s] type [%s] is not editable", keyID, key.Type)
}
if nil == fieldValue {
continue
}
if "" == fieldValue.Mode {
fieldValue.Mode = NewItemFieldValueStatic
}
switch fieldValue.Mode {
case NewItemFieldValueCurrentTime:
if KeyTypeDate != key.Type {
return fmt.Errorf("new item template field [%s] current time mode requires date type", keyID)
}
fieldValue.Value = nil
case NewItemFieldValueStatic:
if nil == fieldValue.Value {View on GitHub (pinned to 251596fc0d)
Solutions
- Before saving, prune FieldValues entries whose keyID is no longer in av.KeyValues.
- Refresh the AV schema client-side before opening the template editor.
- When deleting a column server-side, also call RemoveNewItemTemplateFieldValue (new_item_template.go:113) in the same transaction.
Example fix
// before
FieldValues: map[string]*av.NewItemFieldValue{"deleted-key": {...}}
// after
delete(FieldValues, "deleted-key") Defensive patterns
Strategy: validation
Validate before calling
for keyID := range t.FieldValues {
if _, err := av.GetKey(keyID); err != nil {
delete(t.FieldValues, keyID) // prune stale references before saving
}
} Prevention
- Refresh the AV schema client-side before editing templates.
- On column deletion server-side, call RemoveNewItemTemplateFieldValue in the same transaction.
- Drop FieldValues entries that no longer resolve before submit.
When it happens
Trigger: A column is deleted while the new-item-template editor is open; the client submits stale FieldValues referencing the removed keyID; a sync applies a remote column deletion locally before the template save lands; an import payload from a different AV schema.
Common situations: Race between column removal and template save; client caches the schema and does not refresh; copy of a template between AVs whose column sets differ.
Related errors
- new item template field [%s] option [%s] not found
- new item templates config is nil
- new item template name is empty
- invalid new item template id [%s]
- duplicated new item template id [%s]
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/46fecd83065fa6e5.
Report an issue: GitHub.