Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b7dd585

Browse files
Exclude callable field defaults from the OpenAPI schema (#1167)
* Exclude callable field defaults from the OpenAPI schema * Organize callable default test in line with project standards
1 parent 126cd9f commit b7dd585

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

‎CHANGELOG.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ any parts of the framework not mentioned in the documentation should generally b
5353
* Fixed "id" field being added to /data/attributes in the OpenAPI schema when it is not rendered there.
5454
* Fixed `SerializerMethodResourceRelatedField(many=True)` fields being given
5555
a "reltoone" schema reference instead of "reltomany".
56+
* Callable field default values are excluded from the OpenAPI schema, as they don't resolve to YAML data types.
5657

5758
## [6.0.0] - 2022年09月24日
5859

‎rest_framework_json_api/schemas/openapi.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -727,7 +727,7 @@ def map_serializer(self, serializer):
727727
schema["writeOnly"] = True
728728
if field.allow_null:
729729
schema["nullable"] = True
730-
if field.default and field.default != empty:
730+
if field.default and field.default != emptyandnotcallable(field.default):
731731
schema["default"] = field.default
732732
if field.help_text:
733733
# Ensure django gettext_lazy is rendered correctly

‎tests/schemas/test_openapi.py‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from rest_framework_json_api.schemas.openapi import AutoSchema
2+
from tests.serializers import CallableDefaultSerializer
3+
4+
5+
class TestAutoSchema:
6+
def test_schema_callable_default(self):
7+
inspector = AutoSchema()
8+
result = inspector.map_serializer(CallableDefaultSerializer())
9+
assert result["properties"]["attributes"]["properties"]["field"] == {
10+
"type": "string",
11+
}

‎tests/serializers.py‎

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
from rest_framework_json_api import serializers
12
from rest_framework_json_api.relations import ResourceRelatedField
2-
from rest_framework_json_api.serializers import ModelSerializer
33
from tests.models import (
44
BasicModel,
55
ForeignKeySource,
@@ -9,36 +9,43 @@
99
)
1010

1111

12-
class BasicModelSerializer(ModelSerializer):
12+
class BasicModelSerializer(serializers.ModelSerializer):
1313
class Meta:
1414
fields = ("text",)
1515
model = BasicModel
1616

1717

18-
class ForeignKeySourceSerializer(ModelSerializer):
18+
class ForeignKeySourceSerializer(serializers.ModelSerializer):
1919
target = ResourceRelatedField(queryset=ForeignKeyTarget.objects)
2020

2121
class Meta:
2222
model = ForeignKeySource
2323
fields = ("target",)
2424

2525

26-
class ManyToManySourceSerializer(ModelSerializer):
26+
class ManyToManySourceSerializer(serializers.ModelSerializer):
2727
targets = ResourceRelatedField(many=True, queryset=ManyToManyTarget.objects)
2828

2929
class Meta:
3030
model = ManyToManySource
3131
fields = ("targets",)
3232

3333

34-
class ManyToManyTargetSerializer(ModelSerializer):
34+
class ManyToManyTargetSerializer(serializers.ModelSerializer):
3535
class Meta:
3636
model = ManyToManyTarget
3737

3838

39-
class ManyToManySourceReadOnlySerializer(ModelSerializer):
39+
class ManyToManySourceReadOnlySerializer(serializers.ModelSerializer):
4040
targets = ResourceRelatedField(many=True, read_only=True)
4141

4242
class Meta:
4343
model = ManyToManySource
4444
fields = ("targets",)
45+
46+
47+
class CallableDefaultSerializer(serializers.Serializer):
48+
field = serializers.CharField(default=serializers.CreateOnlyDefault("default"))
49+
50+
class Meta:
51+
fields = ("field",)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /