@@ -67,19 +67,19 @@ def get_json_schema(self) -> dict:
6767 if field .name not in result ["schema" ]["properties" ] or field .name not in ser_fields :
6868 continue
6969
70+ serializer_field = ser_fields [field .name ]
71+ if serializer_field .read_only :
72+ continue
73+
7074 if isinstance (field , ForeignKey ):
71- if not (s_field := typing .cast (serializers .PrimaryKeyRelatedField | None , ser_fields [ field . name ] )):
75+ if not (s_field := typing .cast (serializers .PrimaryKeyRelatedField | None , serializer_field )):
7276 continue
73- e_values_qs = field .remote_field .model .objects if s_field .read_only else s_field .get_queryset ()
74- e_values = self .get_enum_values (e_values_qs , field .null )
77+ e_values = self .get_enum_values (s_field .get_queryset (), field .null )
7578 result ["schema" ]["properties" ][field .name ]["oneOf" ] = e_values
7679 elif isinstance (field , ManyToManyField ):
77- if not (s_field := typing .cast (serializers .ManyRelatedField | None , ser_fields [ field . name ] )):
80+ if not (s_field := typing .cast (serializers .ManyRelatedField | None , serializer_field )):
7881 continue
79- e_values_qs = (
80- field .remote_field .model .objects if s_field .read_only else s_field .child_relation .get_queryset ()
81- )
82- e_values = self .get_enum_values (e_values_qs , False )
82+ e_values = self .get_enum_values (s_field .child_relation .get_queryset (), False )
8383 result ["schema" ]["properties" ][field .name ]["items" ]["oneOf" ] = e_values
8484 result ["schema" ]["properties" ][field .name ]["uniqueItems" ] = True
8585 self .set_ui_schema (result ["ui_schema" ], field .name , {"ui:field" : "m2m_select" })
0 commit comments