graphene-django:没有“Meta.fields”或“Meta.exclude”的“Meta.model”自 0.15.0 以来已被弃用,现在已被禁止

Posted

技术标签:

【中文标题】graphene-django:没有“Meta.fields”或“Meta.exclude”的“Meta.model”自 0.15.0 以来已被弃用,现在已被禁止【英文标题】:graphene-django: 'Meta.model' without either 'Meta.fields' or 'Meta.exclude' has been deprecated since 0.15.0 and is now disallowed 【发布时间】:2021-01-15 00:44:36 【问题描述】:

我正在尝试使用 django-graphene 返回过滤后的结果,但它给出了关于 error-message 的错误

class PatientType(DjangoObjectType):
    class Meta:
        model = Patients
        exclude = ('active',)
        interfaces = (relay.Node,)


class PatientsQuery(ObjectType):
    get_patient = graphene.Field(PatientType, id=graphene.Int())
    all_patients = graphene.List(
        PatientType, first=graphene.Int(), skip=graphene.Int(), phone_no=graphene.Int()
    )
    upcoming_appointments = DjangoFilterConnectionField(PatientType)


@permissions_checker([IsAuthenticated, CheckIsOrganizationActive])
def resolve_upcoming_appointments(self, info, **kwargs) -> List:
    d = datetime.today() - timedelta(hours=1)
    settings.TIME_ZONE  # 'Asia/Karachi'
    aware_datetime = make_aware(d)
    res = Patients.objects.filter(appointments__booking_date__gte=aware_datetime,
                                  appointments__booking_date__day=aware_datetime.day,
                                  appointments__status=True)
    if res:
        return res
    return []


class Query(
    organization_schema.OrganizationQuery,
    inventory_schema.MedicineQuery,
    patient_schema.PatientsQuery,
    graphene.ObjectType,
):
    pass

【问题讨论】:

【参考方案1】:

PatientType.Meta中的filter_fields属性指定为

class PatientType(DjangoObjectType):
    class Meta:
        model = Patients
        exclude = ('active',)
        interfaces = (relay.Node,)
        filter_fields = ["field_1", "field_2"]

或者,您可以在 Meta 部分中设置 filter_fields=[]filterset_class 属性

更多示例可以在文档中找到,GraphenePython- Filtering

【讨论】:

如果这真的是答案,那么他们需要修复他们的文档,因为他们的examples 没有提到filter_fields 我希望如此 :) 顺便说一句,设置 filter_fields=[] 也是有效的 是的,这就是我最终所做的。

以上是关于graphene-django:没有“Meta.fields”或“Meta.exclude”的“Meta.model”自 0.15.0 以来已被弃用,现在已被禁止的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL graphene-django 基本使用文档

如何将 Angular/Apollo 客户端与 graphene-django 集成?

Graphene-Django - 如何将参数从 Query 传递到类 DjangoObjectType

为啥在graphene-django中中继?

Graphene-Django 嵌套过滤器(中继)

graphene-django 中的自定义参数