This commit is contained in:
Luke Hodkinson 2017-10-30 03:59:48 +00:00 committed by GitHub
commit 46e090f6de
2 changed files with 18 additions and 11 deletions

View File

@ -2,7 +2,9 @@ from collections import OrderedDict
from functools import partial
from graphene.types.argument import to_arguments
from ..fields import DjangoConnectionField
from ..utils import maybe_queryset
from .utils import get_filtering_args_from_filterset, get_filterset_class
@ -72,7 +74,7 @@ class DjangoFilterConnectionField(DjangoConnectionField):
filter_kwargs = {k: v for k, v in args.items() if k in filtering_args}
qs = filterset_class(
data=filter_kwargs,
queryset=default_manager.get_queryset()
queryset=maybe_queryset(default_manager)
).qs
return super(DjangoFilterConnectionField, cls).connection_resolver(

View File

@ -1,16 +1,12 @@
from collections import OrderedDict
import graphene
from graphene.relay.mutation import ClientIDMutation
from graphene.types import Field, InputField
from graphene.types.mutation import MutationOptions
from graphene.relay.mutation import ClientIDMutation
from graphene.types.objecttype import (
yank_fields_from_attrs
)
from graphene.types.objecttype import yank_fields_from_attrs
from .serializer_converter import (
convert_serializer_field
)
from .serializer_converter import convert_serializer_field
from .types import ErrorType
@ -69,7 +65,8 @@ class SerializerMutation(ClientIDMutation):
@classmethod
def mutate_and_get_payload(cls, root, info, **input):
serializer = cls._meta.serializer_class(data=input)
existing = cls.load_existing(cls._meta.serializer_class, input)
serializer = cls._meta.serializer_class(existing, data=input)
if serializer.is_valid():
return cls.perform_mutate(serializer, info)
@ -81,7 +78,15 @@ class SerializerMutation(ClientIDMutation):
return cls(errors=errors)
@classmethod
def load_existing(cls, serializer_class, data):
id = data.get('id')
if id is not None:
model_class = serializer_class.Meta.model
return model_class.objects.get(id=data['id'])
return None
@classmethod
def perform_mutate(cls, serializer, info):
obj = serializer.save()
return cls(errors=None, **obj)
serializer.save()
return cls(errors=None, **serializer.data)