Skip to content

Commit b19308b

Browse files
authored
Merge pull request #323 from pizzapanther/master
fixes #322, fixed incorrect serializer instance usage
2 parents 568073a + 6cfd5b2 commit b19308b

File tree

4 files changed

+42
-7
lines changed

4 files changed

+42
-7
lines changed

django_test_settings.py

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
INSTALLED_APPS = [
1010
'graphene_django',
11+
'graphene_django.rest_framework',
1112
'graphene_django.tests',
1213
'starwars',
1314
]
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.db import models
2+
3+
4+
class MyFakeModel(models.Model):
5+
cool_name = models.CharField(max_length=50)
6+
created = models.DateTimeField(auto_now_add=True)

graphene_django/rest_framework/mutation.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,9 @@ def mutate_and_get_payload(cls, root, info, **input):
8484
@classmethod
8585
def perform_mutate(cls, serializer, info):
8686
obj = serializer.save()
87-
return cls(errors=None, **obj)
87+
88+
kwargs = {}
89+
for f, field in serializer.fields.items():
90+
kwargs[f] = field.get_attribute(obj)
91+
92+
return cls(errors=None, **kwargs)

graphene_django/rest_framework/tests/test_mutation.py

+29-6
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
from django.db import models
1+
import datetime
2+
23
from graphene import Field
34
from graphene.types.inputobjecttype import InputObjectType
45
from py.test import raises
6+
from py.test import mark
57
from rest_framework import serializers
68

79
from ...types import DjangoObjectType
10+
from ..models import MyFakeModel
811
from ..mutation import SerializerMutation
912

1013

11-
class MyFakeModel(models.Model):
12-
cool_name = models.CharField(max_length=50)
13-
14-
1514
class MyModelSerializer(serializers.ModelSerializer):
1615
class Meta:
1716
model = MyFakeModel
@@ -71,6 +70,7 @@ class Meta:
7170
model_input_type = model_input._type.of_type
7271
assert issubclass(model_input_type, InputObjectType)
7372
assert 'cool_name' in model_input_type._meta.fields
73+
assert 'created' in model_input_type._meta.fields
7474

7575

7676
def test_mutate_and_get_payload_success():
@@ -88,6 +88,19 @@ class Meta:
8888
assert result.errors is None
8989

9090

91+
@mark.django_db
92+
def test_model_mutate_and_get_payload_success():
93+
class MyMutation(SerializerMutation):
94+
class Meta:
95+
serializer_class = MyModelSerializer
96+
97+
result = MyMutation.mutate_and_get_payload(None, None, **{
98+
'cool_name': 'Narf',
99+
})
100+
assert result.errors is None
101+
assert result.cool_name == 'Narf'
102+
assert isinstance(result.created, datetime.datetime)
103+
91104
def test_mutate_and_get_payload_error():
92105

93106
class MyMutation(SerializerMutation):
@@ -96,4 +109,14 @@ class Meta:
96109

97110
# missing required fields
98111
result = MyMutation.mutate_and_get_payload(None, None, **{})
99-
assert len(result.errors) > 0
112+
assert len(result.errors) > 0
113+
114+
def test_model_mutate_and_get_payload_error():
115+
116+
class MyMutation(SerializerMutation):
117+
class Meta:
118+
serializer_class = MyModelSerializer
119+
120+
# missing required fields
121+
result = MyMutation.mutate_and_get_payload(None, None, **{})
122+
assert len(result.errors) > 0

0 commit comments

Comments
 (0)