首页 > 解决方案 > Django RESTApi 使用 ForeignKey 作为过滤器仍然会产生错误

问题描述

我想我更接近我的 API 问题,但我仍然收到以下错误:

TypeError: Field 'id' expected a number but got <built-in function id>.

模型:

from django.contrib.auth.models import User

class Todos(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=20, default="")
    text = models.TextField(max_length=450, default="")
    done = models.BooleanField(default=False)

序列化器:

class TodosSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todos
        fields = ("id", "owner", "name", "text", "done")

看法:

class TodosView(viewsets.ModelViewSet):
    queryset = Todos.objects.filter(owner__id=id)
    serializer_class = TodosSerializer

网址:

router = routers.DefaultRouter()
router.register("todos/<int:id>", views.TodosView)

urlpatterns = [path("", include(router.urls))]

我想为单个用户获取所有待办事项。我在这里做错了什么?

编辑:

queryset = Todos.objects.filter(owner__id=1)

这实际上不会产生错误。我的 URL 似乎有些不对劲:

http://localhost:8000/todos/%3Cint:id%3E/

标签: djangodjango-modelsdjango-rest-frameworkdjango-viewsdjango-serializer

解决方案


推荐阅读