Skip to content

Commit e827b10

Browse files
authored
Merge pull request #379 from mongkok/default-meta
Allow DjangoObjectType to have default meta
2 parents fd3faf0 + 3051374 commit e827b10

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

graphene_django/tests/test_types.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from graphene.relay import Node
55

66
from .. import registry
7-
from ..types import DjangoObjectType
7+
from ..types import DjangoObjectType, DjangoObjectTypeOptions
88
from .models import Article as ArticleModel
99
from .models import Reporter as ReporterModel
1010

@@ -67,6 +67,26 @@ def test_django_objecttype_with_node_have_correct_fields():
6767
assert list(fields.keys()) == ['id', 'headline', 'pub_date', 'reporter', 'editor', 'lang', 'importance']
6868

6969

70+
def test_django_objecttype_with_custom_meta():
71+
class ArticleTypeOptions(DjangoObjectTypeOptions):
72+
'''Article Type Options'''
73+
74+
class ArticleType(DjangoObjectType):
75+
class Meta:
76+
abstract = True
77+
78+
@classmethod
79+
def __init_subclass_with_meta__(cls, _meta=None, **options):
80+
_meta = ArticleTypeOptions(cls)
81+
super(ArticleType, cls).__init_subclass_with_meta__(_meta=_meta, **options)
82+
83+
class Article(ArticleType):
84+
class Meta:
85+
model = ArticleModel
86+
87+
assert isinstance(Article._meta, ArticleTypeOptions)
88+
89+
7090
def test_schema_representation():
7191
expected = """
7292
schema {

graphene_django/types.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class DjangoObjectType(ObjectType):
4545
@classmethod
4646
def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=False,
4747
only_fields=(), exclude_fields=(), filter_fields=None, connection=None,
48-
connection_class=None, use_connection=None, interfaces=(), **options):
48+
connection_class=None, use_connection=None, interfaces=(), _meta=None, **options):
4949
assert is_valid_django_model(model), (
5050
'You need to pass a valid Django Model in {}.Meta, received "{}".'
5151
).format(cls.__name__, model)
@@ -82,7 +82,9 @@ def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=Fa
8282
"The connection must be a Connection. Received {}"
8383
).format(connection.__name__)
8484

85-
_meta = DjangoObjectTypeOptions(cls)
85+
if not _meta:
86+
_meta = DjangoObjectTypeOptions(cls)
87+
8688
_meta.model = model
8789
_meta.registry = registry
8890
_meta.filter_fields = filter_fields

0 commit comments

Comments
 (0)