首页 > 解决方案 > 如何实现 django 模型到 graphene-django 类型的自定义映射?

问题描述

在 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 来实现 GraphQL API。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
  }
}

如何实现此自定义模型到类型映射?

标签: pythondjangodjango-modelsgraphqlgraphene-django

解决方案


推荐阅读