[英]Django 4 REST framework JSON POST request filter
我有這個 API,我需要在其中過濾一些數據。 我的用戶將傳遞一個包含多個實例的 JSON,如果我的數據庫中存在或不存在,我需要返回給他們。 但我不知道如何使 Django 4 在同一個 JSON 中發出多個 POST 請求(我想因為他們只會獲取信息,所以這將是幾個“GET”請求,但我需要在 POST 中發出它們)。 關於我應該怎么做的想法? 我什至不知道如何開始。
例如,POST 請求可以是:
[
{
"name": "media1"
},
{
"name": "media2"
},
{
"name": "media3"
}
]
如果我有媒體 1 和 3 但沒有媒體 2,則 API 將返回以下內容:
[
{
"id": 0,
"name": "media1"
},
{
None
},
{
"id": 1,
"name": "media3"
}
]
這是我目前的觀點。 我實現了一個過濾器,一次只適用於一個 GET 請求:
class MediasViewSet(viewsets.ModelViewSet):
queryset = Media.objects.all().order_by('name')
serializer_class = MediaSerializer
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def get_queryset(self, *args, **kwargs):
print(self.request)
queryset = super().get_queryset()
if(self.request.data.__contains__("name")):
query = self.request.data['name']
if query:
queryset = Media.objects.filter(name=query)
return queryset
這是我的媒體 model:
class Media(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=45)
def __str__(self):
return self.name
還有我的序列化程序:
class MediaSerializer(serializers.ModelSerializer):
class Meta:
model = Mediafields = ['id', 'name', 'processed_status']
經過一番掙扎,我設法找到了解決辦法。 這是我所做的:
我創建了另一個名為 CheckMediasAPIView 的視圖並導入了 CreateAPIView,這樣我就可以重寫 post 方法。 然后,我使用了reduce方法,對每個名稱使用OR邏輯運算符和過濾器。 這是結果:
class CheckMediasAPIView(CreateAPIView):
def post(self, request, *args, **kwargs):
q = request.data["list"]
query = reduce(operator.or_, (Q(name__contains = item["name"]) for item in q))
result = Media.objects.filter(query).values()
return Response(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.