django - 我可以从模型参数在 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)
但不知道如何更改主键?
解决方案
您可以通过在 SchemaViewSet 中设置 lookup_field = 'name' 来设置。
例如
class SchemaViewSet(viewsets.ModelViewSet):
queryset = models.Schema.objects.all()
serializer_class = serializers.SchemaSerializer
lookup_field = 'name'
推荐阅读
- html - 缩放没有纵横比的 SVG 图像
- html - 显示单元格宽度:表格
- python - 创建字典并使用相应的键聚合值
- azure - Azure 逻辑应用:在 Blob 中创建 CSV 文件
- ssl-certificate - Atlassian Bitbucket (Stash) SSL 证书续订
- selenium - 一个类中提到的 TestNg 注释是如何从另一个类的另一个类中执行的?
- python - 如何解释 tensorflow 中 tf.rank 的输出
- jquery - 找到最大数量的 tr
- javascript - 如何将丢失的对象添加到数组中?
- c# - Process.Start() 的可靠性然后使用 C# 关闭当前进程