Skip to content

Commit 2dc5571

Browse files
authored
Ensured that sparse fieldset support formatted field names (#1286)
1 parent 87108d4 commit 2dc5571

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ any parts of the framework not mentioned in the documentation should generally b
1919

2020
* Ensured that interpreting `include` query parameter is done in internal Python naming.
2121
This adds full support for using multipart field names for includes while configuring `JSON_API_FORMAT_FIELD_NAMES`.
22+
* Ensured that sparse fieldset fully supports `JSON_API_FORMAT_FIELD_NAMES`.
2223

2324
### Removed
2425

rest_framework_json_api/serializers.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
get_resource_type_from_instance,
2727
get_resource_type_from_model,
2828
get_resource_type_from_serializer,
29+
undo_format_field_name,
2930
)
3031

3132

@@ -89,7 +90,10 @@ def _readable_fields(self):
8990
sparse_fieldset_query_param
9091
)
9192
if sparse_fieldset_value is not None:
92-
sparse_fields = sparse_fieldset_value.split(",")
93+
sparse_fields = [
94+
undo_format_field_name(sparse_field)
95+
for sparse_field in sparse_fieldset_value.split(",")
96+
]
9397
return (
9498
field
9599
for field in readable_fields

tests/test_serializers.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import pytest
22
from django.db import models
3+
from rest_framework.request import Request
34
from rest_framework.utils import model_meta
45

56
from rest_framework_json_api import serializers
@@ -84,3 +85,22 @@ class Meta:
8485
"verified",
8586
"uuid",
8687
]
88+
89+
90+
def test_readable_fields_with_sparse_fields(client, rf, settings):
91+
class TestSerializer(serializers.Serializer):
92+
name = serializers.CharField()
93+
value = serializers.CharField()
94+
multi_part_name = serializers.CharField()
95+
96+
class Meta:
97+
resource_name = "test"
98+
99+
settings.JSON_API_FORMAT_FIELD_NAMES = "camelize"
100+
request = Request(rf.get("/test/", {"fields[test]": "value,multiPartName"}))
101+
context = {"request": request}
102+
serializer = TestSerializer(context=context)
103+
assert [field.field_name for field in serializer._readable_fields] == [
104+
"value",
105+
"multi_part_name",
106+
]

0 commit comments

Comments
 (0)