Как я могу реализовать пользовательское сопоставление модели django с типом графена- django? - PullRequest
2 голосов
/ 15 января 2020

В Django 3.0.2 Я определил модель, подобную следующей, в <django-app>/model.py:

from django.db import models
from django.utils.translation import gettext_lazy as _


class Something(models.Model):

    class UnitPrefix(models.TextChoices):
        MILLI = 'MILLI', _('Milli')
        MICRO = 'MICRO', _('Micro')
        NANO = 'NANO', _('Nano')

    class UnitSi(models.TextChoices):
        VOLUME = 'CM', _('Cubicmetre')
        METRE = 'M', _('Metre')

    unit_prefix = models.CharField(
        max_length=5,
        choices=UnitPrefix.choices,
        default=UnitPrefix.MICRO,
    )
    unit_si = models.CharField(
        max_length=2,
        choices=UnitSi.choices,
        default=UnitSi.M,
    )

Я использую graphene- django для реализации API-интерфейса GraphQL. API предоставляет модель через <django-app>/schema.py:

from graphene_django import DjangoObjectType
from .models import Something


class SomethingType(DjangoObjectType):
    class Meta:
        model = Something

class Query(object):
    """This object is combined with other app specific schemas in the Django project schema.py"""
    somethings = graphene.List(SomethingType)
    ...

В результате я могу успешно запрашивать через GraphQL:

{
  somethings {
    unitPrefix
    unitSi
  }
}

Однако я бы хотел определить тип GraphQL

type Something {
  unit: Unit
}

type Unit {
  prefix: Unit
  si: Si
}

enum UnitPrefix {
  MILLI
  MICRO
  NANO
}

enum UnitSi {
  CUBICMETRE
  LITRE
}

, которые я могу запросить с помощью

{
  somethings {
    unitPrefix
    unitSi
  }
}

Как реализовать эту пользовательскую модель для сопоставления типов?

...