Disclaimer
Проект находится на ранней стадии разработки
Как пользоваться?
Обязательные поля в инпутах
import graphene
from graphene_t2 import InputObjectType
class AddSomethingInput(InputObjectType):
field1 = graphene.String(required=True)
field2 = graphene.String(required=True)
class EditSomethingInput(AddSomethingInput):
class T2Meta:
required = {
False: '__all__', # или список полей
True: ['id'],
}
id = graphene.ID()
Примечания
- нет поддержки
graphene.Argument
- порядок ключей (
True
,False
) в параметреrequired
важен. Изменения применяются в порядке их объявления
changes.py
)
Документирование изменений (Автоматически изменяет описание полей. Может использоваться для генерации документации.
import graphene
from graphene_t2 import InputObjectType
from graphene_t2.features.changes import Alter, Deprecate
class SomeInputType(InputObjectType):
class T2Meta:
changes = [
Deprecate('legacy_field1', '03/20', replaced_by='new_field1'),
Deprecate('legacy_field2', '02/20', comment='Не используется'),
Alter('new_field1', '03/20', required=True),
]
legacy_field1 = graphene.String()
legacy_field2 = graphene.String()
new_field1 = graphene.String()
ordering.py
)
Сортировка (В классе-нследнике ObjectType
нужно объявить класс T2Meta
.
Внутри него можно создать две переменные:
-
can_order_by
- обязательный, список с названием полей, по которым можно производить сортировку; -
default_ordering
- необязательный, сортировка по-умолчанию, строка или список строк с названием полей.
Примеры:
class Model1Type(DjangoObjectType):
class T2Meta:
can_order_by = ['id']
class Model2Type(DjangoObjectType):
class T2Meta:
can_order_by = ['id']
default_ordering = 'id' # или '-id'
class Model3Type(DjangoObjectType):
class T2Meta:
can_order_by = ['id', 'name', 'date_created']
default_ordering = '-date_created', 'name' # или ['-date_created', 'name']
Класс с объявлением методов нужно отнаследовать от graphene_t2.QueriesType
, объявить вложенный класс T2Meta
.
Внутри объявить переменную enable_ordering_for
.
Возможны два вида значения:
-
__auto__
- включает возможность сортировки, для методов для которых это возможно сделать; - список с названием полей
Ресолверы в качестве аргумента должны принимать **kwargs
или sort_by
.
from graphene_t2 import QueriesType
class Query1(QueriesType):
class T2Meta:
enable_ordering_for = '__auto__'
items = graphene.List(Model1Type)
def resolve_items(self, info, **kwargs):
pass
class Query2(QueriesType):
class T2Meta:
enable_ordering_for = ['items']
items = graphene.List(Model1Type)
def resolve_items(self, info, sort_by):
pass
Примечания
- Нет поддержки случаев, когда название поля в модели отличается от названия в API;
- Нет возможности сортировать по полям вложенных структур;