【发布时间】:2020-11-11 15:07:28
【问题描述】:
我正在学习 Django REST 框架的课程,但我在尝试将 django_filters 中的 ordering 配置设置为 ViewSet 时遇到了困难。
ordering = ('-members__count')
在课程的原始代码中,-members__count 用作返回成员总数的查询,但是当我尝试使用相同的语法时,我得到了这个错误:
错误:
Cannot resolve keyword 'count' into field. Choices are: auth_token, circle, created, date_joined, email, first_name, groups, id, invitation, invited_by, is_active, is_client, is_staff, is_superuser, is_verified, issued_by, last_login, last_name, logentry, membership, modified, password, phone_number, profile, user_permissions, username
也许我误解了这个错误,但所有这些建议的选项都对应于我模型中的字段。此外,在 Course 中,它指出这是一种查询表示格式,用于获取该字段的总数,所以我对此有点困惑。
无论如何,这是我的代码简历,但如果需要,您也可以在此 repo 中查看我的完整详细代码:https://github.com/cadasmeq/comparte_ride/tree/master/cride/circles。
查看:
# Filters
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
class CircleViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
"""Circle view set."""
serializer_class = CircleModelSerializer
lookup_field = 'slug_name'
# Filters
filter_backends = (SearchFilter, OrderingFilter, DjangoFilterBackend)
search_fields = ('slug_name', 'name')
ordering_fields = ('rides_offered', 'rides_taken', 'name', 'created', 'member_limit')
ordering = ('-members__count', '-rides_offered', '-rides_taken')
filter_fields = ('verified', 'is_limited')
型号:
class Circle(CRideModel):
"""Circle model.
A circle is a private group where rides are offered and taken
by its members. To join a circle a user must receive an unique
invitation code from an existing circle member.
"""
members = models.ManyToManyField(
"users.User",
through='circles.Membership',
through_fields=('circle', 'user')
)
非常感谢大家,对于生疏的英语,我很抱歉哈哈
【问题讨论】:
标签: django django-rest-framework manytomanyfield