- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有继电器和过滤器的 Graphite 烯接口(interface)。它工作得很好,但我想添加 order_by 选项。我的对象看起来像:
class FooGQLType(DjangoObjectType):
class Meta:
model = Foo
exclude_fields = ('internal_id',)
interfaces = (graphene.relay.Node,)
filter_fields = {
"id": ["exact"],
"code": ["exact", "icontains"],
}
connection_class = ExtendedConnection
class Query(graphene.ObjectType):
foo = DjangoFilterConnectionField(FooGQLType)
class ExtendedConnection(graphene.Connection):
class Meta:
abstract = True
total_count = graphene.Int()
def resolve_total_count(root, info, **kwargs):
return root.length
foo(code_Icontains:"bar")
一样查询.
class FooGQLFilter(FilterSet):
class Meta:
model = Foo
order_by = OrderingFilter(
fields=(
('code', 'code'),
('lastName', 'last_name'),
('otherNames', 'other_names'),
)
)
fields
或
exclude
:
AssertionError: Setting 'Meta.model' without either 'Meta.fields' or 'Meta.exclude' has been deprecated since 0.15.0 and is now disallowed. Add an explicit 'Meta.fields' or 'Meta.exclude' to the FooGQLFilter class.
fields = []
为了让它静音,它编译。
foo = DjangoFilterConnectionField(FooGQLType, filterset_class=FooGQLFilter)
code_Icontains
消失。我可以在那里再次添加它们,但这很愚蠢。快速查看源代码,看起来 Relay 或 django-filters 已经创建了一个 FilterSet 类(有意义),并且以这种方式覆盖它显然是一个糟糕的主意。
DjangoFilterConnectionField
的示例与
connection_resolver
以某种方式注入(inject) order_by 但这告诉我没有 orderBy 参数。
最佳答案
Eric 的解决方案不适用于当前的 graphene-django 版本(2.9.1)或高于 graphene-django 2.6.0 版本。
DjangoFilterConnectionField 方法在 2.7.0 版本中有所更改。
有关更多详细信息,您可以查看更改日志 here
使用 Eric 的解决方案,它会产生错误,connection_resolver() missing 1 required positional argument: 'info’
所以我修改了解决方案,它工作得很好。
from graphene_django.filter import DjangoFilterConnectionField
from graphene.utils.str_converters import to_snake_case
class OrderedDjangoFilterConnectionField(DjangoFilterConnectionField):
@classmethod
def resolve_queryset(
cls, connection, iterable, info, args, filtering_args, filterset_class
):
qs = super(DjangoFilterConnectionField, cls).resolve_queryset(
connection, iterable, info, args
)
filter_kwargs = {k: v for k, v in args.items() if k in filtering_args}
qs = filterset_class(data=filter_kwargs, queryset=qs, request=info.context).qs
order = args.get('orderBy', None)
if order:
if type(order) is str:
snake_order = to_snake_case(order)
else:
snake_order = [to_snake_case(o) for o in order]
qs = qs.order_by(*snake_order)
return qs
关于Django Graphene Relay order_by (OrderingFilter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57478464/
我有一个使用 OrderingFilter 的模型后端。现在只能按字段订购 id被允许。 我也想提供按其他字段排序的选项,但不必在我的数据库中公开字段名称。有没有办法做到这一点? 最佳答案 我创建了一
我一直在尝试获取 OrderingFilter去工作。从 django-rest-framework 页面中的示例来看,它似乎应该相当简单: class UserListView(generics.L
我有一个带有继电器和过滤器的 Graphite 烯接口(interface)。它工作得很好,但我想添加 order_by 选项。我的对象看起来像: class FooGQLType(Djang
我找不到有关如何在 ModelViewSet @action 中使用 django Rest 框架中的 OrderingFilter 的信息,有谁知道我将如何实现它? 我有类别,这些类别有我通过该操作
我找不到有关如何在 ModelViewSet @action 中使用 django Rest 框架中的 OrderingFilter 的信息,有谁知道我将如何实现它? 我有类别,这些类别有我通过该操作
我有一个模型可以说 ObservedMoves .在我的 View 中的许多查询中都引用了此模型。因此,不是直接在每个 View 中应用我想要的过滤器,而是将它们抽象到过滤器类中,让我们说 Obser
我正在使用 Django Rest Framework 构建 API。对于某些模型我使用像这样的元类字段 class Meta: ordering = ['-time'] 而且看起来运行良好。
我有一个 View 集,需要同时具有按参数灵活排序和按参数过滤的自定义 list()超越。我可以通过 django-filter 进行订购以及过滤各种参数。 ,但我无法让它们同时运行。 这是我的简化版
我必须重写 DRF ViewSet 的默认 list() 方法,但是当我这样做时,所有过滤、排序和分页都停止工作。 这是 ViewSet 的代码: class ZoneViewSet(viewsets
我是一名优秀的程序员,十分优秀!