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 集成?