Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion graphene_django/filter/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
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


Expand Down Expand Up @@ -72,7 +74,7 @@ def connection_resolver(cls, resolver, connection, default_manager, max_limit,
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(
Expand Down
25 changes: 15 additions & 10 deletions graphene_django/rest_framework/mutation.py
Original file line number Diff line number Diff line change
@@ -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


Expand Down Expand Up @@ -69,7 +65,8 @@ def __init_subclass_with_meta__(cls, serializer_class=None,

@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)
Expand All @@ -81,7 +78,15 @@ def mutate_and_get_payload(cls, root, info, **input):

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)