Skip to content

Commit aa8f1ff

Browse files
committed
Fix error of multiple inputs with the same type. When using same serializer.
1 parent f76f38e commit aa8f1ff

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

graphene_django/rest_framework/serializer_converter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def convert_serializer_to_input_type(serializer_class):
6565
}
6666

6767
return type(
68-
"{}Input".format(serializer.__class__.__name__),
68+
"{}{}Input".format(serializer.__class__.__name__, serializer._creation_counter),
6969
(graphene.InputObjectType,),
7070
items,
7171
)
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import graphene
2+
import pytest
3+
from django.db import models
4+
from graphene import Schema
5+
from rest_framework import serializers
6+
7+
from graphene_django import DjangoObjectType
8+
from graphene_django.rest_framework.mutation import SerializerMutation
9+
10+
pytestmark = pytest.mark.django_db
11+
12+
13+
class MyFakeChildModel(models.Model):
14+
name = models.CharField(max_length=50)
15+
created = models.DateTimeField(auto_now_add=True)
16+
17+
18+
class MyFakeParentModel(models.Model):
19+
name = models.CharField(max_length=50)
20+
created = models.DateTimeField(auto_now_add=True)
21+
child1 = models.OneToOneField(MyFakeChildModel, related_name='parent1', on_delete=models.CASCADE)
22+
child2 = models.OneToOneField(MyFakeChildModel, related_name='parent2', on_delete=models.CASCADE)
23+
24+
25+
class ParentType(DjangoObjectType):
26+
class Meta:
27+
model = MyFakeParentModel
28+
interfaces = (graphene.relay.Node,)
29+
30+
31+
class ChildType(DjangoObjectType):
32+
class Meta:
33+
model = MyFakeChildModel
34+
interfaces = (graphene.relay.Node,)
35+
36+
37+
class MyModelChildSerializer(serializers.ModelSerializer):
38+
class Meta:
39+
model = MyFakeChildModel
40+
fields = "__all__"
41+
42+
43+
class MyModelParentSerializer(serializers.ModelSerializer):
44+
child1 = MyModelChildSerializer()
45+
child2 = MyModelChildSerializer()
46+
47+
class Meta:
48+
model = MyFakeParentModel
49+
fields = "__all__"
50+
51+
52+
class MyParentModelMutation(SerializerMutation):
53+
class Meta:
54+
serializer_class = MyModelParentSerializer
55+
56+
57+
class Mutation(graphene.ObjectType):
58+
createParentWithChild = MyParentModelMutation.Field()
59+
60+
61+
def test_create_schema():
62+
schema = Schema(mutation=Mutation, types=[ParentType, ChildType])
63+
assert schema

0 commit comments

Comments
 (0)