Skip to main content
 首页 » 编程设计

python之GraphQL:如何对节点的 "foreign key"集合项进行排序

2025年01月19日28zhujiabin

我使用 Django,graphene-django和 django-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, 
    ) 

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

请您参考如下方法:

将此字段添加到节点:

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