mirror of
https://github.com/graphql-python/graphene.git
synced 2024-11-26 19:43:56 +03:00
Fixed django OneToOne inverse relationship conversion. Fix #170
This commit is contained in:
parent
226f81bda1
commit
b431bfe477
|
@ -80,9 +80,15 @@ def convert_date_to_string(field):
|
||||||
return DateTime(description=field.help_text)
|
return DateTime(description=field.help_text)
|
||||||
|
|
||||||
|
|
||||||
|
@convert_django_field.register(models.OneToOneRel)
|
||||||
|
def convert_onetoone_field_to_djangomodel(field):
|
||||||
|
from .fields import DjangoModelField
|
||||||
|
return DjangoModelField(get_related_model(field))
|
||||||
|
|
||||||
|
|
||||||
@convert_django_field.register(models.ManyToManyField)
|
@convert_django_field.register(models.ManyToManyField)
|
||||||
@convert_django_field.register(models.ManyToOneRel)
|
|
||||||
@convert_django_field.register(models.ManyToManyRel)
|
@convert_django_field.register(models.ManyToManyRel)
|
||||||
|
@convert_django_field.register(models.ManyToOneRel)
|
||||||
def convert_field_to_list_or_connection(field):
|
def convert_field_to_list_or_connection(field):
|
||||||
from .fields import DjangoModelField, ConnectionOrListField
|
from .fields import DjangoModelField, ConnectionOrListField
|
||||||
model_field = DjangoModelField(get_related_model(field))
|
model_field = DjangoModelField(get_related_model(field))
|
||||||
|
@ -94,6 +100,8 @@ def convert_field_to_list_or_connection(field):
|
||||||
def convert_relatedfield_to_djangomodel(field):
|
def convert_relatedfield_to_djangomodel(field):
|
||||||
from .fields import DjangoModelField, ConnectionOrListField
|
from .fields import DjangoModelField, ConnectionOrListField
|
||||||
model_field = DjangoModelField(field.model)
|
model_field = DjangoModelField(field.model)
|
||||||
|
if isinstance(field.field, models.OneToOneField):
|
||||||
|
return model_field
|
||||||
return ConnectionOrListField(model_field)
|
return ConnectionOrListField(model_field)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,11 @@ class Pet(models.Model):
|
||||||
name = models.CharField(max_length=30)
|
name = models.CharField(max_length=30)
|
||||||
|
|
||||||
|
|
||||||
|
class FilmDetails(models.Model):
|
||||||
|
location = models.CharField(max_length=30)
|
||||||
|
film = models.OneToOneField('Film', related_name='details')
|
||||||
|
|
||||||
|
|
||||||
class Film(models.Model):
|
class Film(models.Model):
|
||||||
reporters = models.ManyToManyField('Reporter',
|
reporters = models.ManyToManyField('Reporter',
|
||||||
related_name='films')
|
related_name='films')
|
||||||
|
|
|
@ -9,7 +9,7 @@ from ..compat import (ArrayField, HStoreField, JSONField, MissingType,
|
||||||
RangeField)
|
RangeField)
|
||||||
from ..converter import convert_django_field, convert_django_field_with_choices
|
from ..converter import convert_django_field, convert_django_field_with_choices
|
||||||
from ..fields import ConnectionOrListField, DjangoModelField
|
from ..fields import ConnectionOrListField, DjangoModelField
|
||||||
from .models import Article, Reporter
|
from .models import Article, Reporter, Film, FilmDetails
|
||||||
|
|
||||||
|
|
||||||
def assert_conversion(django_field, graphene_field, *args, **kwargs):
|
def assert_conversion(django_field, graphene_field, *args, **kwargs):
|
||||||
|
@ -138,6 +138,15 @@ def test_should_manytoone_convert_connectionorlist():
|
||||||
assert graphene_type.type.model == Article
|
assert graphene_type.type.model == Article
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_onetoone_reverse_convert_model():
|
||||||
|
# Django 1.9 uses 'rel', <1.9 uses 'related
|
||||||
|
related = getattr(Film.details, 'rel', None) or \
|
||||||
|
getattr(Film.details, 'related')
|
||||||
|
graphene_type = convert_django_field(related)
|
||||||
|
assert isinstance(graphene_type, DjangoModelField)
|
||||||
|
assert graphene_type.model == FilmDetails
|
||||||
|
|
||||||
|
|
||||||
def test_should_onetoone_convert_model():
|
def test_should_onetoone_convert_model():
|
||||||
field = assert_conversion(models.OneToOneField, DjangoModelField, Article)
|
field = assert_conversion(models.OneToOneField, DjangoModelField, Article)
|
||||||
assert field.type.model == Article
|
assert field.type.model == Article
|
||||||
|
|
Loading…
Reference in New Issue
Block a user