【问题标题】:GraphQL: how to sort node's "foreign key" set items?GraphQL:如何对节点的“外键”设置项进行排序?
【发布时间】:2018-09-26 10:17:43
【问题描述】:

我使用 Django,graphene-djangodjango-filter 构建 GraphQL api 并遇到 orderBy 的问题:

总的来说:我有院系,每个院系都有几个系。我可以对院系进行排序,但不能对部门进行相同的排序。

Django 模型:

class Faculty(models.Model):
    code = models.CharField(...)

class Department(models.Model):
    code = models.CharField(...)
    faculty = models.ForeignKey(
        Faculty,
        on_delete=models.CASCADE,
        related_name="departments",
    )

为了能够对我添加的院系进行排序:

import graphene
import django_filters
from graphene import relay, ObjectType
from django_filters import OrderingFilter
from graphene_django.types import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField

class FacultyFilter(django_filters.FilterSet):
    class Meta:
        model = Faculty
        fields = ['university']
    order_by = OrderingFilter(fields=('code',))

class DepartmentFilter(django_filters.FilterSet):
    class Meta:
        model = Department
        fields = ['university', 'faculty']
    order_by = OrderingFilter(fields=('code',))

class Query(object):
    faculty = relay.Node.Field(FacultyNode)
    all_faculties = DjangoFilterConnectionField(
        FacultyNode,
        filterset_class=FacultyFilter,
    )

    department = relay.Node.Field(DepartmentNode)
    all_departments = DjangoFilterConnectionField(
        DepartmentNode,
        filterset_class=DepartmentFilter,
    )

为什么我不能对一组部门进行排序?

【问题讨论】:

    标签: python django graphql graphene-python


    【解决方案1】:

    将此字段添加到节点:

    class FacultyNode(DjangoObjectType):
        departments = DjangoFilterConnectionField(
            DepartmentNode,  # lambda: DepartmentNode (if Node is defined later)
            filterset_class=DepartmentFilter,
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-21
      • 2018-11-28
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      相关资源
      最近更新 更多