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 functools import partial
from graphene.types.argument import to_arguments from graphene.types.argument import to_arguments
from ..fields import DjangoConnectionField from ..fields import DjangoConnectionField
from ..utils import maybe_queryset
from .utils import get_filtering_args_from_filterset, get_filterset_class 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} filter_kwargs = {k: v for k, v in args.items() if k in filtering_args}
qs = filterset_class( qs = filterset_class(
data=filter_kwargs, data=filter_kwargs,
queryset=default_manager.get_queryset() queryset=maybe_queryset(default_manager)
).qs ).qs
return super(DjangoFilterConnectionField, cls).connection_resolver( return super(DjangoFilterConnectionField, cls).connection_resolver(

View File

@ -1,16 +1,12 @@
from collections import OrderedDict from collections import OrderedDict
import graphene import graphene
from graphene.relay.mutation import ClientIDMutation
from graphene.types import Field, InputField from graphene.types import Field, InputField
from graphene.types.mutation import MutationOptions 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 ( from .serializer_converter import convert_serializer_field
convert_serializer_field
)
from .types import ErrorType from .types import ErrorType
@ -69,7 +65,8 @@ class SerializerMutation(ClientIDMutation):
@classmethod @classmethod
def mutate_and_get_payload(cls, root, info, **input): 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(): if serializer.is_valid():
return cls.perform_mutate(serializer, info) return cls.perform_mutate(serializer, info)
@ -81,7 +78,15 @@ class SerializerMutation(ClientIDMutation):
return cls(errors=errors) 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 @classmethod
def perform_mutate(cls, serializer, info): def perform_mutate(cls, serializer, info):
obj = serializer.save() serializer.save()
return cls(errors=None, **obj) return cls(errors=None, **serializer.data)