Skip to content

Commit

Permalink
add test and another case to #901
Browse files Browse the repository at this point in the history
  • Loading branch information
tfranzel committed Mar 4, 2023
1 parent aaae20a commit fc646fd
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
4 changes: 2 additions & 2 deletions drf_spectacular/openapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -964,10 +964,10 @@ def _get_serializer_field_meta(self, field, direction):
serializers.ModelField,
serializers.SerializerMethodField,
serializers.PrimaryKeyRelatedField,
serializers.SlugRelatedField,
),
):
# Skip coercion for lack of a better solution. ModelField.to_representation()
# and SerializerMethodField.to_representation() are special in that they require
# Skip coercion for lack of a better solution. These are special in that they require
# a model instance or object (which we don't have) instead of a plain value.
default = field.default
else:
Expand Down
35 changes: 35 additions & 0 deletions tests/test_regressions.py
Original file line number Diff line number Diff line change
Expand Up @@ -3036,3 +3036,38 @@ class XViewset(viewsets.ModelViewSet):
'id': {'type': 'integer', 'readOnly': True},
'field': {'format': 'double', 'readOnly': True, 'type': 'number'}
}


def test_serializer_foreign_key_default_value_handling(no_warnings):
class M10(models.Model):
field = models.CharField(unique=True)

class M11(models.Model):
field_related = models.ForeignKey(M10, on_delete=models.CASCADE, default=1)

class XSerializer(serializers.ModelSerializer):
field_related = serializers.PrimaryKeyRelatedField(
queryset=M11.objects.all(),
default=1,
)
field_related_slug = serializers.SlugRelatedField(
source='field_related',
slug_field='field',
queryset=M10.objects.all(),
default='foo',
)

class Meta:
fields = '__all__'
model = M11

class XViewset(viewsets.ModelViewSet):
serializer_class = XSerializer
queryset = M11.objects.none()

schema = generate_schema('/x', XViewset)
assert schema['components']['schemas']['X']['properties'] == {
'id': {'type': 'integer', 'readOnly': True},
'field_related': {'type': 'integer', 'default': 1},
'field_related_slug': {'type': 'string', 'default': 'foo'},
}

0 comments on commit fc646fd

Please sign in to comment.