filterset_class 中的特定字段
Specific field in filterset_class
我有学生模型,我需要使用 filterset_class
过滤没有私人教练的学生
models.py
class Student(models.Model):
personal_trainer = models.ForeignKey(PersonalTrainer, on_delete=models.CASCADE, blank=True, null=True)
views.py
class StudentsView(ReadOnlyModelViewSet):
permission_classes = [IsAuthenticated]
serializer_class = StudentsSerializer
lookup_field = "pk"
pagination_class = None
这里是 views.py
class StudentFilter(rest_framework.FilterSet):
has_personal_trainer = rest_framework.BooleanFilter(field_name="personal_trainer", lookup_expr="isnull")
class Meta:
model = Student
fields = ("has_personal_trainer")
class StudentsView(ReadOnlyModelViewSet):
permission_classes = [IsAuthenticated]
serializer_class = StudentsSerializer
lookup_field = "pk"
pagination_class = None
filter_backends = (rest_framework.DjangoFilterBackend,)
filterset_class = StudentFilter
当我将请求与 api/students?care_navigator=false
一起使用时,它给了我以下错误消息
`django.core.exceptions.FieldError: Cannot resolve keyword 'has_personal_trainer' into field. Choices are: personal_trainer, personal_trainer_id`
等...
您可以使用 FilterSet
class.
from django_filters import rest_framework
class StudentFilter(rest_framework.FilterSet):
has_personal_trainer = rest_framework.BooleanFilter(field_name="personal_trainer", lookup_expr="isnull")
class Meta:
model = Student
fields = ("has_personal_trainer",)
在views.py
from django_filters import rest_framework
class StudentsView(ReadOnlyModelViewSet):
permission_classes = [IsAuthenticated]
serializer_class = StudentsSerializer
lookup_field = "pk"
pagination_class = None
filter_backends = (rest_framework.DjangoFilterBackend,)
filterset_class = StudentFilter
用法
api/students?has_personal_trainer=true
或 api/students?has_personal_trainer=false
我有学生模型,我需要使用 filterset_class
models.py
class Student(models.Model):
personal_trainer = models.ForeignKey(PersonalTrainer, on_delete=models.CASCADE, blank=True, null=True)
views.py
class StudentsView(ReadOnlyModelViewSet):
permission_classes = [IsAuthenticated]
serializer_class = StudentsSerializer
lookup_field = "pk"
pagination_class = None
这里是 views.py
class StudentFilter(rest_framework.FilterSet):
has_personal_trainer = rest_framework.BooleanFilter(field_name="personal_trainer", lookup_expr="isnull")
class Meta:
model = Student
fields = ("has_personal_trainer")
class StudentsView(ReadOnlyModelViewSet):
permission_classes = [IsAuthenticated]
serializer_class = StudentsSerializer
lookup_field = "pk"
pagination_class = None
filter_backends = (rest_framework.DjangoFilterBackend,)
filterset_class = StudentFilter
当我将请求与 api/students?care_navigator=false
一起使用时,它给了我以下错误消息
`django.core.exceptions.FieldError: Cannot resolve keyword 'has_personal_trainer' into field. Choices are: personal_trainer, personal_trainer_id`
等...
您可以使用 FilterSet
class.
from django_filters import rest_framework
class StudentFilter(rest_framework.FilterSet):
has_personal_trainer = rest_framework.BooleanFilter(field_name="personal_trainer", lookup_expr="isnull")
class Meta:
model = Student
fields = ("has_personal_trainer",)
在views.py
from django_filters import rest_framework
class StudentsView(ReadOnlyModelViewSet):
permission_classes = [IsAuthenticated]
serializer_class = StudentsSerializer
lookup_field = "pk"
pagination_class = None
filter_backends = (rest_framework.DjangoFilterBackend,)
filterset_class = StudentFilter
用法
api/students?has_personal_trainer=true
或 api/students?has_personal_trainer=false