mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-02-16 19:40:36 +03:00
BUGFIX: don't filter out lookup_field as input (required for update) (#1029)
This commit is contained in:
parent
ee3d4f521f
commit
65f41c1a17
|
@ -26,6 +26,7 @@ def fields_for_serializer(
|
||||||
exclude_fields,
|
exclude_fields,
|
||||||
is_input=False,
|
is_input=False,
|
||||||
convert_choices_to_enum=True,
|
convert_choices_to_enum=True,
|
||||||
|
lookup_field=None,
|
||||||
):
|
):
|
||||||
fields = OrderedDict()
|
fields = OrderedDict()
|
||||||
for name, field in serializer.fields.items():
|
for name, field in serializer.fields.items():
|
||||||
|
@ -35,7 +36,9 @@ def fields_for_serializer(
|
||||||
name in exclude_fields,
|
name in exclude_fields,
|
||||||
field.write_only
|
field.write_only
|
||||||
and not is_input, # don't show write_only fields in Query
|
and not is_input, # don't show write_only fields in Query
|
||||||
field.read_only and is_input, # don't show read_only fields in Input
|
field.read_only
|
||||||
|
and is_input
|
||||||
|
and lookup_field != name, # don't show read_only fields in Input
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -91,6 +94,7 @@ class SerializerMutation(ClientIDMutation):
|
||||||
exclude_fields,
|
exclude_fields,
|
||||||
is_input=True,
|
is_input=True,
|
||||||
convert_choices_to_enum=convert_choices_to_enum,
|
convert_choices_to_enum=convert_choices_to_enum,
|
||||||
|
lookup_field=lookup_field,
|
||||||
)
|
)
|
||||||
output_fields = fields_for_serializer(
|
output_fields = fields_for_serializer(
|
||||||
serializer,
|
serializer,
|
||||||
|
@ -98,6 +102,7 @@ class SerializerMutation(ClientIDMutation):
|
||||||
exclude_fields,
|
exclude_fields,
|
||||||
is_input=False,
|
is_input=False,
|
||||||
convert_choices_to_enum=convert_choices_to_enum,
|
convert_choices_to_enum=convert_choices_to_enum,
|
||||||
|
lookup_field=lookup_field,
|
||||||
)
|
)
|
||||||
|
|
||||||
if not _meta:
|
if not _meta:
|
||||||
|
|
|
@ -143,17 +143,20 @@ def test_write_only_field_using_extra_kwargs():
|
||||||
|
|
||||||
def test_read_only_fields():
|
def test_read_only_fields():
|
||||||
class ReadOnlyFieldModelSerializer(serializers.ModelSerializer):
|
class ReadOnlyFieldModelSerializer(serializers.ModelSerializer):
|
||||||
|
id = serializers.CharField(read_only=True)
|
||||||
cool_name = serializers.CharField(read_only=True)
|
cool_name = serializers.CharField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = MyFakeModelWithPassword
|
model = MyFakeModelWithPassword
|
||||||
fields = ["cool_name", "password"]
|
lookup_field = "id"
|
||||||
|
fields = ["id", "cool_name", "password"]
|
||||||
|
|
||||||
class MyMutation(SerializerMutation):
|
class MyMutation(SerializerMutation):
|
||||||
class Meta:
|
class Meta:
|
||||||
serializer_class = ReadOnlyFieldModelSerializer
|
serializer_class = ReadOnlyFieldModelSerializer
|
||||||
|
|
||||||
assert "password" in MyMutation.Input._meta.fields
|
assert "password" in MyMutation.Input._meta.fields
|
||||||
|
assert "id" in MyMutation.Input._meta.fields
|
||||||
assert (
|
assert (
|
||||||
"cool_name" not in MyMutation.Input._meta.fields
|
"cool_name" not in MyMutation.Input._meta.fields
|
||||||
), "'cool_name' is read_only field and shouldn't be on arguments"
|
), "'cool_name' is read_only field and shouldn't be on arguments"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user