首页 > 解决方案 > 我可以从模型参数在 django 中发出检索请求吗?

问题描述

我正在为我的 api 使用 Django 休息框架。在我的views.py 文件中,我使用的是Viewset.ModelViewset。

class SchemaViewSet(viewsets.ModelViewSet):

    queryset = models.Schema.objects.all()
    serializer_class = serializers.SchemaSerializer

我的网址是: http: //127.0.0.1 :7000/api/schema/ 这给了我 GET 和 POST 选项。响应是这样的:

{
        "id": 1,
        "name": "yatharth",
        "version": "1.1"
    },

要删除/放置/补丁,我必须像这样传递 1 的 id:http: //127.0.0.1 :7000/api/schema/1/ 。
我可以这样命名吗:http: //127.0.0.1 :7000/api/schema/yathath/而不是 id。

我的model.py(我可以将名称设置为唯一=真)

class Schema(models.Model):
    """Database model for Schema """


    name= models.TextField()
    version = models.TextField()

    def __str__(self):
        return self.name

我还需要 id 参数,所以删除它不是一个选项,但不是通过 id 进行查询,我需要按名称进行查询(两者都是唯一的)

我在 django rest 框架文档中找到的内容

def retrieve(self, request, pk=None):
        queryset = User.objects.all()
        user = get_object_or_404(queryset, pk=pk)
        serializer = UserSerializer(user)
        return Response(serializer.data)

但不知道如何更改主键?

标签: djangodjango-modelsdjango-rest-frameworkdjango-views

解决方案


您可以通过在 SchemaViewSet 中设置 lookup_field = 'name' 来设置。

例如

class SchemaViewSet(viewsets.ModelViewSet):

    queryset = models.Schema.objects.all()
    serializer_class = serializers.SchemaSerializer
    lookup_field = 'name'

推荐阅读