Create new fields and exclude options that are aliased to exclude_fields and only_fields

This commit is contained in:
Jonathan Kim 2019-06-25 16:41:28 +01:00
parent a2103c19f4
commit 64bc6c7c2e
2 changed files with 62 additions and 6 deletions

View File

@ -220,17 +220,61 @@ def test_django_objecttype_only_fields():
assert fields == ["id", "email", "films"]
@with_local_registry
def test_django_objecttype_fields():
class Reporter(DjangoObjectType):
class Meta:
model = ReporterModel
fields = ("id", "email", "films")
fields = list(Reporter._meta.fields.keys())
assert fields == ["id", "email", "films"]
@with_local_registry
def test_django_objecttype_only_fields_and_fields():
with pytest.raises(Exception):
class Reporter(DjangoObjectType):
class Meta:
model = ReporterModel
only_fields = ("id", "email", "films")
fields = ("id", "email", "films")
@with_local_registry
def test_django_objecttype_exclude_fields():
class Reporter(DjangoObjectType):
class Meta:
model = ReporterModel
exclude_fields = "email"
exclude_fields = ["email"]
fields = list(Reporter._meta.fields.keys())
assert "email" not in fields
@with_local_registry
def test_django_objecttype_exclude():
class Reporter(DjangoObjectType):
class Meta:
model = ReporterModel
exclude = ["email"]
fields = list(Reporter._meta.fields.keys())
assert "email" not in fields
@with_local_registry
def test_django_objecttype_exclude_fields_and_exclude():
with pytest.raises(Exception):
class Reporter(DjangoObjectType):
class Meta:
model = ReporterModel
exclude = ["email"]
exclude_fields = ["email"]
class TestDjangoObjectType:
@pytest.fixture
def PetModel(self):

View File

@ -74,8 +74,10 @@ class DjangoObjectType(ObjectType):
model=None,
registry=None,
skip_registry=False,
only_fields=(),
exclude_fields=(),
only_fields=(), # deprecated in favour of `fields`
fields=(),
exclude_fields=(), # deprecated in favour of `exclude`
exclude=(),
filter_fields=None,
filterset_class=None,
connection=None,
@ -109,10 +111,20 @@ class DjangoObjectType(ObjectType):
)
)
# Alias only_fields -> fields
if only_fields and fields:
raise Exception("Can't set both only_fields and fields")
if only_fields:
fields = only_fields
# Alias exclude_fields -> exclude
if exclude_fields and exclude:
raise Exception("Can't set both exclude_fields and exclude")
if exclude_fields:
exclude = exclude_fields
django_fields = yank_fields_from_attrs(
construct_fields(
model, registry, only_fields, exclude_fields, convert_choices_to_enum
),
construct_fields(model, registry, fields, exclude, convert_choices_to_enum),
_as=Field,
)