Improved field overwriting in Django mapped models

This commit is contained in:
Syrus Akbary 2015-10-15 23:37:08 -07:00
parent cafcd89e57
commit 440a981750
2 changed files with 11 additions and 3 deletions

View File

@ -30,10 +30,12 @@ class DjangoObjectTypeMeta(ObjectTypeMeta):
all_fields = sorted(list(cls._meta.model._meta.fields) + all_fields = sorted(list(cls._meta.model._meta.fields) +
list(cls._meta.model._meta.local_many_to_many)) list(cls._meta.model._meta.local_many_to_many))
all_fields += list(reverse_fields) all_fields += list(reverse_fields)
already_created_fields = {f.field_name for f in cls._meta.local_fields}
for field in all_fields: for field in all_fields:
is_not_in_only = only_fields and field.name not in only_fields is_not_in_only = only_fields and field.name not in only_fields
is_excluded = field.name in cls._meta.exclude_fields is_already_created = field.name in already_created_fields
is_excluded = field.name in cls._meta.exclude_fields or is_already_created
if is_not_in_only or is_excluded: if is_not_in_only or is_excluded:
# We skip this field if we specify only_fields and is not # We skip this field if we specify only_fields and is not
# in there. Or when we excldue this field in exclude_fields # in there. Or when we excldue this field in exclude_fields

View File

@ -7,6 +7,7 @@ from graphene.relay.fields import (
from graphene.core.fields import ( from graphene.core.fields import (
Field, Field,
StringField, StringField,
IntField
) )
from graphql.core.type import ( from graphql.core.type import (
GraphQLObjectType, GraphQLObjectType,
@ -25,16 +26,16 @@ from tests.utils import assert_equal_lists
class Character(DjangoInterface): class Character(DjangoInterface):
'''Character description''' '''Character description'''
class Meta: class Meta:
model = Reporter model = Reporter
class Human(DjangoNode): class Human(DjangoNode):
'''Human description''' '''Human description'''
pub_date = IntField()
def get_node(self, id): def get_node(self, id):
pass pass
@ -69,6 +70,11 @@ def test_node_idfield():
assert isinstance(idfield, NodeIDField) assert isinstance(idfield, NodeIDField)
def test_node_replacedfield():
idfield = Human._meta.fields_map['pub_date']
assert isinstance(idfield, IntField)
def test_interface_resolve_type(): def test_interface_resolve_type():
resolve_type = Character.resolve_type(schema, Human(object())) resolve_type = Character.resolve_type(schema, Human(object()))
assert isinstance(resolve_type, GraphQLObjectType) assert isinstance(resolve_type, GraphQLObjectType)