我正在djangorestframework與drf-spectacularDjango 專案的模塊一起使用,并且我正在嘗試為我的Project模型構建一些基本的 API 方法。它的結構如下所示:
from django.db import models
# Create your models here.
class Project(models.Model):
title = models.CharField(max_length = 128)
description = models.TextField()
image = models.URLField()
date = models.DateTimeField(auto_now_add=True)
我還有一個模型的序列化程式,如下所示:
from rest_framework import serializers
from api.models.Project import Project
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = ['title', 'description', 'image', 'date']
然后,在 中views.py,我創建了兩個函式:project_list_view,它可以讓您Project從資料庫中獲取所有物件,或者讓您 POST 一個新物件。最后,project_detail_view,它允許您Project通過輸入物件pk(整數id)來獲取物件。這是我的兩個功能:
@api_view(['GET', 'POST'])
def project_list_view(request):
if request.method == 'GET':
projects = Project.objects.all()
serializer = ProjectSerializer(projects, many=True)
return Response(serializer.data)
elif request.method == "POST":
serializer = ProjectSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@api_view(['GET'])
def project_detail_view(request, pk):
if request.method == "GET":
try:
project = Project.objects.get(pk = pk)
serializer = ProjectSerializer(project, many = False)
return Response(serializer.data, status = status.HTTP_200_OK)
except:
return Response(status=status.HTTP_404_NOT_FOUND)
GET fromproject_list_view和project_detail_viewwork,但我的問題在于 POST 方法。我的 Swagger 設定為在訪問
我的問題是:為什么 Swagger 不會為模型的每個引數顯示欄位?謝謝你。
uj5u.com熱心網友回復:
Swagger 從serializer_class變數中獲取欄位。我真的建議您將格式更改為基于類的視圖。使用mixins 或泛型類的東西。
你的觀點可能是這樣的
class ProjectView(mixins.RetrieveModelMixin, mixins.CreateModelMixin, viewsets.GenericViewSet):
permission_classes = [permissions.IsAuthenticated, ]
serializer_class = ProjectSerializer
queryset = Project.objects.all()
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
更多關于 Mixin 和通用視圖
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/368336.html
