Python Django DRF:如何显示过滤后的数据

Python Django DRF:如何显示过滤后的数据,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在学习todo教程。我有TodoItem和TodoList,当我转到url`时会得到它们。我只想从api返回已完成的todoItem。我该怎么做 models.py 序列化程序.py views.py 这是项目级别的url.py from django.contrib import admin from django.urls import path, include from rest_framework import routers from todo import views ro

我正在学习todo教程。我有TodoItem和TodoList,当我转到url`时会得到它们。我只想从api返回已完成的todoItem。我该怎么做

models.py

序列化程序.py

views.py

这是项目级别的url.py

from django.contrib import admin
from django.urls import path, include 
from rest_framework import routers
from todo import views

router = routers.DefaultRouter()
router.register(r'todos', views.TodoView, 'todo')
router.register(r'todoitems', views.TodoListView, 'todoitem')
router.register(r'todolists', views.TodoItemView, 'todolist')


urlpatterns = [
        path('admin/', admin.site.urls),
        path('accounts/', include('django.contrib.auth.urls')),         
        path('api/', include(router.urls))
]      
另一个问题是我需要一个用户登录/注册机制。我已将所有者属性添加到上面注释的TodoList中。但是,如何列出这样的数据,如显示user1已完成的任务

您的TodoItemView

class TodoItemView(viewsets.ModelViewSet):
    serializer_class = TodoItemSerializer
    queryset = TodoItem.objects.all()
    filter_backends = [DjangoFilterBackend]
    filter_class = TodoItemFilter

你的TodoItemFilter

class TodoItemFilter(django_filters.rest_framework.FilterSet):

    class Meta:
        model = TodoItem
        fields = ('is_completed',)
还可以添加类的其他字段
在这种情况下,你可以做

@NalinDobhal他当然可以做,但这样过滤到视图中并不是一个好的做法。你可以使用filter类,通过使用query Param按模型字段过滤模型。看一看。还请记住,这是一个单独的Python库,您必须手动安装。我应该在wiews.py文件中这样做吗?将您的自定义过滤器放入filters.py,并将其放入使用TodoItem的应用程序中
from django.contrib import admin
from django.urls import path, include 
from rest_framework import routers
from todo import views

router = routers.DefaultRouter()
router.register(r'todos', views.TodoView, 'todo')
router.register(r'todoitems', views.TodoListView, 'todoitem')
router.register(r'todolists', views.TodoItemView, 'todolist')


urlpatterns = [
        path('admin/', admin.site.urls),
        path('accounts/', include('django.contrib.auth.urls')),         
        path('api/', include(router.urls))
]      
class TodoItemView(viewsets.ModelViewSet):
    serializer_class = TodoItemSerializer
    queryset = TodoItem.objects.all()
    filter_backends = [DjangoFilterBackend]
    filter_class = TodoItemFilter

class TodoItemFilter(django_filters.rest_framework.FilterSet):

    class Meta:
        model = TodoItem
        fields = ('is_completed',)