Skip to content

Commit e4e33f9

Browse files
committed
Fixed bug with fields on form
1 parent e83aef8 commit e4e33f9

2 files changed

Lines changed: 59 additions & 3 deletions

File tree

fastadmin/models/base.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,12 @@ def get_fields_for_serialize(self) -> set[str]:
268268
"""
269269
fields = self.get_model_fields_with_widget_types()
270270
fields_for_serialize = {field.name for field in fields}
271+
if self.fields:
272+
fields_for_serialize &= set(self.fields)
271273
if self.exclude:
272274
fields_for_serialize -= set(self.exclude)
273-
include_fields = set(self.fields) | set(self.list_display)
274-
if include_fields:
275-
fields_for_serialize &= include_fields
275+
if self.list_display:
276+
fields_for_serialize |= set(self.list_display)
276277
return fields_for_serialize
277278

278279
async def serialize_obj_attributes(

tests/models/test_base.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import pytest
22

33
from fastadmin import ModelAdmin
4+
from fastadmin.models.schemas import ModelFieldWidgetSchema, WidgetType
45

56

67
async def test_not_implemented_methods():
@@ -42,6 +43,60 @@ class Model:
4243

4344
base = ModelAdmin(Model)
4445

46+
mocker.patch.object(base, "get_model_fields_with_widget_types", return_value=[])
47+
assert not base.get_fields_for_serialize()
48+
49+
values = [
50+
ModelFieldWidgetSchema(
51+
name=f"test_{index}",
52+
column_name=f"test_{index}",
53+
is_m2m=False,
54+
is_pk=False,
55+
is_immutable=False,
56+
form_widget_type=WidgetType.Input,
57+
form_widget_props={},
58+
filter_widget_type=WidgetType.Input,
59+
filter_widget_props={},
60+
)
61+
for index in range(3)
62+
]
63+
mocker.patch.object(base, "get_model_fields_with_widget_types", return_value=values)
64+
fields = base.get_fields_for_serialize()
65+
assert len(fields) == 3
66+
assert "test_0" in base.get_fields_for_serialize()
67+
68+
base.exclude = ("test_0",)
69+
fields = base.get_fields_for_serialize()
70+
assert len(fields) == 2
71+
assert "test_0" not in base.get_fields_for_serialize()
72+
73+
base.fields = ("test_0",)
74+
base.exclude = ("test_0",)
75+
fields = base.get_fields_for_serialize()
76+
assert len(fields) == 0
77+
assert "test_0" not in base.get_fields_for_serialize()
78+
79+
base.fields = ("test_0",)
80+
base.exclude = ()
81+
fields = base.get_fields_for_serialize()
82+
assert len(fields) == 1
83+
assert "test_0" in base.get_fields_for_serialize()
84+
85+
base.fields = ("test_0",)
86+
base.list_display = ("test_1",)
87+
base.exclude = ()
88+
fields = base.get_fields_for_serialize()
89+
assert len(fields) == 2
90+
assert "test_0" in base.get_fields_for_serialize()
91+
assert "test_1" in base.get_fields_for_serialize()
92+
93+
94+
async def test_get_fields_for_serialize(mocker):
95+
class Model:
96+
pass
97+
98+
base = ModelAdmin(Model)
99+
45100
mocker.patch.object(base, "orm_get_list", return_value=([], 0))
46101
mocker.patch.object(base, "get_model_fields_with_widget_types", return_value=[])
47102
await base.get_export("wrong_format") is None

0 commit comments

Comments
 (0)