mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-12-09 19:24:21 +03:00
84 lines
1.9 KiB
ReStructuredText
84 lines
1.9 KiB
ReStructuredText
Types
|
|
=====
|
|
|
|
This page documents specific features of Types related to Graphene-Django.
|
|
|
|
DjangoChoicesEnum
|
|
-----------------
|
|
|
|
``DjangoChoicesEnum`` is a helper class that lets you keep Graphene style enums
|
|
and ``models.Field.choices`` in sync. Some Django fields accept a ``choices`` list like this:
|
|
|
|
.. code:: python
|
|
|
|
choices = [
|
|
('FOO', 'foo'),
|
|
('BAR', 'bar'),
|
|
]
|
|
|
|
class MyModel(models.Model):
|
|
options = models.CharField(max_length='3', choices=choices)
|
|
|
|
With Graphene-Django it is useful to represent these choices as an enum:
|
|
|
|
.. code::
|
|
|
|
query getEnumType {
|
|
__type(name: "MyModelOptions" ) {
|
|
name
|
|
enumValues {
|
|
name
|
|
description
|
|
}
|
|
}
|
|
}
|
|
|
|
Which will return a data structure like this:
|
|
|
|
.. code::
|
|
|
|
{
|
|
"data": {
|
|
"__type": {
|
|
"name": "MyModelOptions",
|
|
"enumValues": [
|
|
{
|
|
"name": "FOO",
|
|
"description": "foo"
|
|
},
|
|
{
|
|
"name": "BAR",
|
|
"description": "bar"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
We can use ``DjangoChoicesEnum`` to support both of these for us:
|
|
|
|
.. code:: python
|
|
|
|
from graphene_django import DjangoObjectType, DjangoChoicesEnum
|
|
from django.db import models
|
|
|
|
# Declare your DjangoChoicesEnum
|
|
class MyModelChoices(DjangoChoicesEnum):
|
|
FOO = 'foo'
|
|
BAR = 'bar'
|
|
|
|
# Your model should use the .choices method
|
|
class MyModel(models.Model):
|
|
options = models.CharField(
|
|
max_length='3',
|
|
choices=DjangoChoicesEnum.choices(),
|
|
default=DjangoChoicesEnum.choices()[0][0],
|
|
)
|
|
|
|
# And your ObjectType should explicitly declare the type:
|
|
class MyModelType(DjangoObjectType):
|
|
class Meta:
|
|
model = MyModel
|
|
fields = ('options',)
|
|
|
|
options = MyModelChoices.as_enum() |