From 9f32dfa7baa73dffcd990b936429918f29eecd5d Mon Sep 17 00:00:00 2001 From: Gani Georgiev Date: Wed, 22 Jul 2026 23:11:29 +0300 Subject: [PATCH] allow passing noninitialized *filesystem.File values --- core/field_file.go | 8 ++++++-- core/field_file_test.go | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/core/field_file.go b/core/field_file.go index f648024b..f4b6baa7 100644 --- a/core/field_file.go +++ b/core/field_file.go @@ -732,12 +732,16 @@ func (f *FileField) toSliceValue(raw any) []any { case nil: // nothing to cast case *filesystem.File: - result = append(result, value) + if value != nil { + result = append(result, value) + } case filesystem.File: result = append(result, &value) case []*filesystem.File: for _, v := range value { - result = append(result, v) + if v != nil { + result = append(result, v) + } } case []filesystem.File: for _, v := range value { diff --git a/core/field_file_test.go b/core/field_file_test.go index 0e210050..71b29f4c 100644 --- a/core/field_file_test.go +++ b/core/field_file_test.go @@ -103,6 +103,8 @@ func TestFileFieldPrepareValue(t *testing.T) { t.Fatal(err) } + var nilFile *filesystem.File + scenarios := []struct { raw any field *core.FileField @@ -114,8 +116,9 @@ func TestFileFieldPrepareValue(t *testing.T) { {123, &core.FileField{MaxSelect: 1}, `"123"`}, {"a", &core.FileField{MaxSelect: 1}, `"a"`}, {`["a"]`, &core.FileField{MaxSelect: 1}, `"a"`}, - {*f1, &core.FileField{MaxSelect: 1}, string(f1Raw)}, {f1, &core.FileField{MaxSelect: 1}, string(f1Raw)}, + {*f1, &core.FileField{MaxSelect: 1}, string(f1Raw)}, + {nilFile, &core.FileField{MaxSelect: 1}, `""`}, {[]string{}, &core.FileField{MaxSelect: 1}, `""`}, {[]string{"a", "b"}, &core.FileField{MaxSelect: 1}, `"b"`}, @@ -126,8 +129,9 @@ func TestFileFieldPrepareValue(t *testing.T) { {"a", &core.FileField{MaxSelect: 2}, `["a"]`}, {`["a"]`, &core.FileField{MaxSelect: 2}, `["a"]`}, {[]any{f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`}, - {[]*filesystem.File{f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`}, {[]filesystem.File{*f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`}, + {[]*filesystem.File{f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`}, + {[]any{nilFile, f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`}, {[]string{}, &core.FileField{MaxSelect: 2}, `[]`}, {[]string{"a", "b", "c"}, &core.FileField{MaxSelect: 2}, `["a","b","c"]`}, }