Created
March 12, 2019 12:49
-
-
Save dmutende/dc19ccd006c54872c558ebf8239dff16 to your computer and use it in GitHub Desktop.
GraphQL Show Record Count (Total Count)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# .../site-packages/graphene_django/types.py | |
#...... | |
class DjangoObjectType(ObjectType): | |
@classmethod | |
def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=False, | |
only_fields=(), exclude_fields=(), filter_fields=None, connection=None, | |
## use_connection=None, interfaces=(), **options): | |
connection_class=None, use_connection=None, interfaces=(), **options): | |
assert is_valid_django_model(model), ( | |
'You need to pass a valid Django Model in {}.Meta, received "{}".' | |
).format(cls.__name__, model) | |
if not registry: | |
registry = get_global_registry() | |
assert isinstance(registry, Registry), ( | |
'The attribute registry in {} needs to be an instance of ' | |
'Registry, received "{}".' | |
).format(cls.__name__, registry) | |
if not DJANGO_FILTER_INSTALLED and filter_fields: | |
raise Exception("Can only set filter_fields if Django-Filter is installed") | |
django_fields = yank_fields_from_attrs( | |
construct_fields(model, registry, only_fields, exclude_fields), | |
_as=Field, | |
) | |
if use_connection is None and interfaces: | |
use_connection = any((issubclass(interface, Node) for interface in interfaces)) | |
if use_connection and not connection: | |
# We create the connection automatically | |
# connection = Connection.create_type('{}Connection'.format(cls.__name__), node=cls) | |
if not connection_class: | |
connection_class = Connection | |
connection = connection_class.create_type( | |
'{}Connection'.format(cls.__name__), node=cls) | |
if connection is not None: | |
assert issubclass(connection, Connection), ( | |
"The connection must be a Connection. Received {}" | |
).format(connection.__name__) | |
_meta = DjangoObjectTypeOptions(cls) | |
_meta.model = model | |
_meta.registry = registry | |
_meta.filter_fields = filter_fields | |
_meta.fields = django_fields | |
_meta.connection = connection | |
super(DjangoObjectType, cls).__init_subclass_with_meta__(_meta=_meta, interfaces=interfaces, **options) | |
if not skip_registry: | |
registry.register(cls) | |
def resolve_id(self, info): | |
return self.pk | |
@classmethod | |
def is_type_of(cls, root, info): | |
if isinstance(root, SimpleLazyObject): | |
root._setup() | |
root = root._wrapped | |
if isinstance(root, cls): | |
return True | |
if not is_valid_django_model(type(root)): | |
raise Exception(( | |
'Received incompatible instance "{}".' | |
).format(root)) | |
model = root._meta.model | |
return model == cls._meta.model | |
@classmethod | |
def get_node(cls, info, id): | |
try: | |
return cls._meta.model.objects.get(pk=id) | |
except cls._meta.model.DoesNotExist: | |
return None | |
#......... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment