首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在graphene-django中创建自定义对象以返回分组计数

可以通过以下步骤实现:

  1. 首先,你需要在Django的模型中定义你的自定义对象。假设你有一个名为Category的模型,它有一个名为name的字段,用于存储类别名称。你可以在models.py文件中添加以下代码来定义该模型:
代码语言:txt
复制
from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name
  1. 接下来,你需要创建一个GraphQL类型来映射Category模型。你可以在schema.py文件中添加以下代码来定义该类型:
代码语言:txt
复制
import graphene
from graphene_django import DjangoObjectType
from django.db.models import Count

from .models import Category

class CategoryType(DjangoObjectType):
    class Meta:
        model = Category
        fields = ("id", "name", "count")

    count = graphene.Int()

    def resolve_count(self, info):
        return self.products.count()

class Query(graphene.ObjectType):
    categories = graphene.List(CategoryType)

    def resolve_categories(self, info):
        return Category.objects.annotate(count=Count("products"))

schema = graphene.Schema(query=Query)

在上面的代码中,我们为CategoryType添加了一个名为count的字段,并使用Count函数对products进行注释。然后,我们在Query对象中定义了一个名为categories的解析器函数来获取所有的类别。

  1. 最后,你需要在urls.py文件中将GraphQL视图与URL进行关联。你可以添加以下代码来完成这一步骤:
代码语言:txt
复制
from django.urls import path
from graphene_django.views import GraphQLView

urlpatterns = [
    path("graphql/", GraphQLView.as_view(graphiql=True)),
]

现在,你可以通过访问/graphql/来执行GraphQL查询,并获取带有分组计数的类别列表。以下是一个示例查询:

代码语言:txt
复制
query {
  categories {
    id
    name
    count
  }
}

以上是在graphene-django中创建自定义对象以返回分组计数的完整步骤。对于这个问题,你可以直接使用上述内容作为答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • day 81 Vue学习一之vue初识

    vue称为渐进式js框架,这个框架用来做前后端分离的项目,之前我们学习django,知道django是一个MTV模式的web框架,urls--views--templates,模板渲染通过后端的代码来实现数据的渲染,再加上前端一些简单的dom操作来完成网页的开发,当我们做一个复杂的大型的网页的时候,你会发现这种模式作起来会比较复杂,扩展起来也比较困难,因为前后端没有分离开,耦合性太高,牵一发而动全身,所以人们就开始想,如果能有专门的人来开发前端,专门的人来开发后端,前端页面就是前端语言来写,后端服务端代码就是后端服务端代码来写,两者之前只有数据的交流,那么以后页面在进行拓展,进行功能的更新的时候就会变得比较简单,因此vue就诞生了,之前我们前端页面拿到数据都是通过dom操作或者django的模板语言来进行数据的渲染的,有了前端框架vue,就不需要他们了,并且频繁的dom操作,创建标签添加标签对页面的性能是有影响的,那么直接数据驱动视图,将django的MTV中的T交给vue来写,也就是那个templates里面的内容,并且前端的vue拿到了T这部分的工作,MTV前身是MVC,可以将vue拿到的T的工作称为view视图,就是完成MVC的V视图层工作,只不过V称为视图函数,重点在函数,而vue我们称为视图,接到后端的数据(通过接口url,获得json数据),直接通过vue的视图渲染在前端。

    02
    领券