这个库向graphene django添加了一些额外的功能,以方便graphql在没有中继的情况下使用,允许分页和过滤集成,并添加了一些额外的指令
graphene-django-extras的Python项目详细描述
石墨烯django附加材料
这个包为graphene django添加了一些额外的功能,以方便在没有中继的情况下使用graphql:
- 允许对查询进行分页和筛选。
- 允许基于突变定义djangorestframework序列化程序。
- 允许对查询和片段使用指令。
注意:订阅支持已移至graphene-django订阅
安装
要安装graphene django extras,只需在shell中运行此命令:
pip install graphene-django-extras
文档:
额外功能:
字段:
- djangoobjectfield
- djangoFilterListfield
- djangoFilterPaginateListField
- djangolistobjectfield(建议用于查询定义)
突变:
- djangoSerializerMutation(建议用于突变定义)
类型:
- djangolistobjecttype(建议用于类型定义)
- djangoinputobjecttype
- djangoSerializerType(建议用于快速查询和突变定义))
分页:
- limitoffsetgraphqlpagination
- 分页
查询和突变示例:
这是石墨烯django extras包使用的基本示例。您可以配置全局参数 对于在settings.py上的djangolistobjecttype类分页定义,如下所示:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}
1-类型定义:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}
2-您可以定义用于突变的输入类型:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User
3-您可以定义使用输入型或基于drf序列化器的突变的传统突变:
importgraphenefromgraphene_django_extrasimportDjangoSerializerMutationfrom.serializersimportUserSerializerfrom.typesimportUserTypefrom.input_typesimportUserInputTypeclassUserSerializerMutation(DjangoSerializerMutation):""" DjangoSerializerMutation auto implement Create, Delete and Update functions """classMeta:description=" DRF serializer based Mutation for Users "serializer_class=UserSerializerclassUserMutation(graphene.Mutation):""" On traditional mutation classes definition you must implement the mutate function """user=graphene.Field(UserType,required=False)classArguments:new_user=graphene.Argument(UserInput)classMeta:description=" Graphene traditional mutation for Users "@classmethoddefmutate(cls,root,info,*args,**kwargs):...
4-定义方案文件:
importgraphenefromgraphene_django_extrasimportDjangoObjectField,DjangoListObjectField,DjangoFilterPaginateListField,DjangoFilterListField,LimitOffsetGraphqlPaginationfrom.typesimportUserType,UserListType,UserModelTypefrom.mutationsimportUserMutation,UserSerializerMutationclassQueries(graphene.ObjectType):# Possible User list queries definitionsusers=DjangoListObjectField(UserListType,description='All Users query')users1=DjangoFilterPaginateListField(UserType,pagination=LimitOffsetGraphqlPagination())users2=DjangoFilterListField(UserType)users3=DjangoListObjectField(UserListType,filterset_class=UserFilter,description='All Users query')# Defining a query for a single user# The DjangoObjectField have a ID type input field, that allow filter by id and is't necessary to define resolve functionuser=DjangoObjectField(UserType,description='Single User query')# Another way to define a query to single useruser1=UserListType.RetrieveField(description='User List with pagination and filtering')# Exist two ways to define single or list user queries with DjangoSerializerTypeuser_retrieve1,user_list1=UserModelType.QueryFields(description='Some description message for both queries',deprecation_reason='Some deprecation message for both queries')user_retrieve2=UserModelType.RetrieveField(description='Some description message for retrieve query',deprecation_reason='Some deprecation message for retrieve query')user_list2=UserModelType.ListField(description='Some description message for list query',deprecation_reason='Some deprecation message for list query')classMutations(graphene.ObjectType):user_create=UserSerializerMutation.CreateField(deprecation_reason='Some one deprecation message')user_delete=UserSerializerMutation.DeleteField()user_update=UserSerializerMutation.UpdateField()# Exist two ways to define mutations with DjangoSerializerTypeuser_create1,user_delete1,user_update1=UserModelType.MutationFields(description='Some description message for create, delete and update mutations',deprecation_reason='Some deprecation message for create, delete and update mutations')user_create2=UserModelType.CreateField(description='Description message for create')user_delete2=UserModelType.DeleteField(description='Description message for delete')user_update2=UserModelType.UpdateField(description='Description message for update')traditional_user_mutation=UserMutation.Field()
5-指令设置:
对于use指令,您必须遵循两个简单步骤:
-
你必须将"graphene-django-extras.extraphqldirectivemiddleware"添加到graphene dict
设置上的配置。py:
# settings.pyGRAPHENE={'SCHEMA_INDENT':4,'MIDDLEWARE':['graphene_django_extras.ExtraGraphQLDirectiveMiddleware']}
- 必须将带有自定义指令的指令参数添加到架构定义中。本模块附带 这些指令允许您格式化字符串、数字、列表和日期(可选),以及 您可以这样加载:
# schema.pyfromgraphene_django_extrasimportall_directivesschema=graphene.Schema(query=RootQuery,mutation=RootMutation,directives=all_directives)
注意:日期指令取决于dateutil模块,因此如果您没有安装它,则此指令将不会 可用。您可以手动安装DateUtil模块:
pip install python-dateutil
或者像这样:
pip install graphene-django-extras
0
就这些!!!!
6-完整指令列表:
对于号码:
- floorGraphQlDirective:floors值。同时支持字符串和浮点字段。
- ceilgraphql指令:ceils值。同时支持字符串和浮点字段。
列表:
- shuffleGraphqlDirective:将列表随机移动到位。
- samplegraphql指令:获取一个"k"int参数,并返回从 录取名单
表示日期:
- dategraphql指令:采用可选的"format"字符串参数,并通过 "format"格式的DateUtil模块。默认格式为:"dd-mmm-yyyy-hh:mm:ss",相当于 %d%b%y%h:%m:%s'python格式。
用于字符串:
- defaultgraphql指令:采用"to"字符串参数。如果没有或"
- base64graphql指令:采用可选的("encode"或"decode")"op"字符串参数(默认为"encode")。 对获取的字符串进行编码或解码。
- numbergraphql指令:采用"as"字符串参数。字符串格式类似于指定的python数字格式。
- currencygraphql指令:采用可选的"symbol"字符串参数(默认值="$")。 将符号参数前置到Taked字符串,并将其格式化为货币。
- 小写的graphql指令:将接受的字符串小写。
- uppercasegraphql指令:采用大写的字符串。
- capitalizegraphql指令:返回第一个字符大写,其余字符降低的字符串。
- camelcasegraphql指令:camelcase获取的字符串。
- snakecasegraphql指令:snakecase获取的字符串。
- kebabcasegraphql指令:snakecase获取字符串。
- swapcasegraphql指令:返回采用的字符串,其中大写字符转换为小写和vice 反之亦然.
- strippgraphql指令:采用可选的"chars"字符串参数(默认值=")。 返回去掉前导和尾随字符的Taked字符串。"chars"参数不是前缀或 后缀;相反,其值的所有组合都被剥离。
- titlecasegraphql指令:返回以大写字符开头的字符串title cased 其余字符均为小写。
- centerpraphql指令:采用"width"字符串参数和可选的"fillchar"字符串参数(默认值=")。 返回以"width"参数为中心的字符串作为新长度。填充是使用指定的 "fillchar"参数。如果"width"参数小于或等于Taked字符串,则返回原始字符串 长度:
- replaceGraphQL指令:接受两个字符串参数"old"和"new",以及一个可选的整数参数 "伯爵"。 返回执行的字符串,所有出现的子字符串"old"参数都替换为"new"参数值。 如果给出了可选参数"count",则只有第一个"count"出现是rep花边,
7-查询示例:
pip install graphene-django-extras
1
8-突变的例子:
pip install graphene-django-extras
2
9-指令示例:
假设我们有这个查询:
pip install graphene-django-extras
3
并返回此数据:
pip install graphene-django-extras
4
正如我们所看到的,有些数据丢失了,或者没有我们喜欢的格式,所以让我们来格式化输出数据 我们想要的:
pip install graphene-django-extras
5
我们得到输出数据:
pip install graphene-django-extras
6
如我们所见,指令是格式化查询输出数据的一种简单方法,它可以像一个链一样组合在一起。
可能日期的标记列表: "yy yy","yy","w w","w","d d","d ddd","d","ddd","dddd","mm","mmm","mmmm","hh","hh","mm","ss","a","z z","z"。
您也可以使用此快捷方式:
- "以前"
- "iso":"yyyy-mmm-ddthh:mm:ss"
- "js"或"javascript":"ddd mmm dd yyyy hh:mm:ss"
更改日志:
v0.4.6:
pip install graphene-django-extras
7
v0.4.5:
pip install graphene-django-extras
8
v0.3.7:
pip install graphene-django-extras
9
v0.3.6:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}0
v0.3.5:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}1
v0.3.4-字母2:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}2
v0.3.4-字母1:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}3
v0.3.3:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}4
v0.3.3-字母1:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}5
v0.3.2:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}6
v0.3.1:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}7
v0.3.0:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}8
v0.2.2:
GRAPHENE_DJANGO_EXTRAS={'DEFAULT_PAGINATION_CLASS':'graphene_django_extras.paginations.LimitOffsetGraphqlPagination','DEFAULT_PAGE_SIZE':20,'MAX_PAGE_SIZE':50,'CACHE_ACTIVE':True,'CACHE_TIMEOUT':300# seconds}9
v0.2.1:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}0
v0.2.0:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}1
v0.1.6:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}2
v0.1.3:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}3
v0.1.2:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}4
v0.1.1:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}5
v0.1.0:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}6
v0.1.0-字母12:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}7
v0.1.0-字母11:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}8
v0.1.0-字母10:
fromdjango.contrib.auth.modelsimportUserfromgraphene_django_extrasimportDjangoListObjectType,DjangoSerializerType,DjangoObjectTypefromgraphene_django_extras.paginationsimportLimitOffsetGraphqlPaginationfrom.serializersimportUserSerializerclassUserType(DjangoObjectType):classMeta:model=Userdescription=" Type definition for a single user "filter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}classUserListType(DjangoListObjectType):classMeta:description=" Type definition for user list "model=Userpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listclassUserModelType(DjangoSerializerType):""" With this type definition it't necessary a mutation definition for user's model """classMeta:description=" User model type definition "serializer_class=UserSerializerpagination=LimitOffsetGraphqlPagination(default_limit=25,ordering="-username")# ordering can be: string, tuple or listfilter_fields={"id":("exact",),"first_name":("icontains","iexact"),"last_name":("icontains","iexact"),"username":("icontains","iexact"),"email":("icontains","iexact"),"is_staff":("exact",),}9
v0.1.0-字母9:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User0
v0.1.0-字母6:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User1
v0.1.0-字母5:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User2
v0.1.0-字母4:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User3
v0.1.0-字母3:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User4
v0.1.0-字母2:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User5
v0.1.0-字母1:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User6
v0.0.4:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User7
v0.0.3:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User8
v0.0.2:
fromgraphene_django_extrasimportDjangoInputObjectTypeclassUserInput(DjangoInputObjectType):classMeta:description=" User InputType definition to use as input on an Arguments class on traditional Mutations "model=User9
v0.0.1:
importgraphenefromgraphene_django_extrasimportDjangoSerializerMutationfrom.serializersimportUserSerializerfrom.typesimportUserTypefrom.input_typesimportUserInputTypeclassUserSerializerMutation(DjangoSerializerMutation):""" DjangoSerializerMutation auto implement Create, Delete and Update functions """classMeta:description=" DRF serializer based Mutation for Users "serializer_class=UserSerializerclassUserMutation(graphene.Mutation):""" On traditional mutation classes definition you must implement the mutate function """user=graphene.Field(UserType,required=False)classArguments:new_user=graphene.Argument(UserInput)classMeta:description=" Graphene traditional mutation for Users "@classmethoddefmutate(cls,root,info,*args,**kwargs):...0
v0.0.1-rc.2:
importgraphenefromgraphene_django_extrasimportDjangoSerializerMutationfrom.serializersimportUserSerializerfrom.typesimportUserTypefrom.input_typesimportUserInputTypeclassUserSerializerMutation(DjangoSerializerMutation):""" DjangoSerializerMutation auto implement Create, Delete and Update functions """classMeta:description=" DRF serializer based Mutation for Users "serializer_class=UserSerializerclassUserMutation(graphene.Mutation):""" On traditional mutation classes definition you must implement the mutate function """user=graphene.Field(UserType,required=False)classArguments:new_user=graphene.Argument(UserInput)classMeta:description=" Graphene traditional mutation for Users "@classmethoddefmutate(cls,root,info,*args,**kwargs):...1
v0.0.1-rc.1:
importgraphenefromgraphene_django_extrasimportDjangoSerializerMutationfrom.serializersimportUserSerializerfrom.typesimportUserTypefrom.input_typesimportUserInputTypeclassUserSerializerMutation(DjangoSerializerMutation):""" DjangoSerializerMutation auto implement Create, Delete and Update functions """classMeta:description=" DRF serializer based Mutation for Users "serializer_class=UserSerializerclassUserMutation(graphene.Mutation):""" On traditional mutation classes definition you must implement the mutate function """user=graphene.Field(UserType,required=False)classArguments:new_user=graphene.Argument(UserInput)classMeta:description=" Graphene traditional mutation for Users "@classmethoddefmutate(cls,root,info,*args,**kwargs):...2
v0.0.1-β.10:
importgraphenefromgraphene_django_extrasimportDjangoSerializerMutationfrom.serializersimportUserSerializerfrom.typesimportUserTypefrom.input_typesimportUserInputTypeclassUserSerializerMutation(DjangoSerializerMutation):""" DjangoSerializerMutation auto implement Create, Delete and Update functions """classMeta:description=" DRF serializer based Mutation for Users "serializer_class=UserSerializerclassUserMutation(graphene.Mutation):""" On traditional mutation classes definition you must implement the mutate function """user=graphene.Field(UserType,required=False)classArguments:new_user=graphene.Argument(UserInput)classMeta:description=" Graphene traditional mutation for Users "@classmethoddefmutate(cls,root,info,*args,**kwargs):...3
v0.0.1-β.9:
importgraphenefromgraphene_django_extrasimportDjangoSerializerMutationfrom.serializersimportUserSerializerfrom.typesimportUserTypefrom.input_typesimportUserInputTypeclassUserSerializerMutation(DjangoSerializerMutation):""" DjangoSerializerMutation auto implement Create, Delete and Update functions """classMeta:description=" DRF serializer based Mutation for Users "serializer_class=UserSerializerclassUserMutation(graphene.Mutation):""" On traditional mutation classes definition you must implement the mutate function """user=graphene.Field(UserType,required=False)classArguments:new_user=graphene.Argument(UserInput)classMeta:description=" Graphene traditional mutation for Users "@classmethoddefmutate(cls,root,info,*args,**kwargs):...4
v0.0.1-β.6:
importgraphenefromgraphene_django_extrasimportDjangoSerializerMutationfrom.serializersimportUserSerializerfrom.typesimportUserTypefrom.input_typesimportUserInputTypeclassUserSerializerMutation(DjangoSerializerMutation):""" DjangoSerializerMutation auto implement Create, Delete and Update functions """classMeta:description=" DRF serializer based Mutation for Users "serializer_class=UserSerializerclassUserMutation(graphene.Mutation):""" On traditional mutation classes definition you must implement the mutate function """user=graphene.Field(UserType,required=False)classArguments:new_user=graphene.Argument(UserInput)classMeta:description=" Graphene traditional mutation for Users "@classmethoddefmutate(cls,root,info,*args,**kwargs):...5
v0.0.1-β.5:
importgraphenefromgraphene_django_extrasimportDjangoSerializerMutationfrom.serializersimportUserSerializerfrom.typesimportUserTypefrom.input_typesimportUserInputTypeclassUserSerializerMutation(DjangoSerializerMutation):""" DjangoSerializerMutation auto implement Create, Delete and Update functions """classMeta:description=" DRF serializer based Mutation for Users "serializer_class=UserSerializerclassUserMutation(graphene.Mutation):""" On traditional mutation classes definition you must implement the mutate function """user=graphene.Field(UserType,required=False)classArguments:new_user=graphene.Argument(UserInput)classMeta:description=" Graphene traditional mutation for Users "@classmethoddefmutate(cls,root,info,*args,**kwargs):...6
v0.0.1-β.4:
importgraphenefromgraphene_django_extrasimportDjangoSerializerMutationfrom.serializersimportUserSerializerfrom.typesimportUserTypefrom.input_typesimportUserInputTypeclassUserSerializerMutation(DjangoSerializerMutation):""" DjangoSerializerMutation auto implement Create, Delete and Update functions """classMeta:description=" DRF serializer based Mutation for Users "serializer_class=UserSerializerclassUserMutation(graphene.Mutation):""" On traditional mutation classes definition you must implement the mutate function """user=graphene.Field(UserType,required=False)classArguments:new_user=graphene.Argument(UserInput)classMeta:description=" Graphene traditional mutation for Users "@classmethoddefmutate(cls,root,info,*args,**kwargs):...7