Использую DRF. Есть две простые модели "Post", "Category". Не знаю как отобразить все посты которые принадлежат конкретной категории.
models.pyclass Category(models.Model):
name = models.CharField(max_length=250)
class Post(models.Model):
title = models.CharField(max_length=250)
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
category = models.ForeignKey(Category, related_name='entries', on_delete=models.CASCADE)
serializers.pyfrom . models import Post, Category
from rest_framework import serializers
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = '__all__'
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = '__all__'
views.pyfrom rest_framework.response import Response
from django.shortcuts import render
from rest_framework.generics import ListAPIView, RetrieveAPIView
from . models import Post, Category
from . serializers import PostSerializer, CategorySerializer
from rest_framework.views import APIView
class GetCategory(APIView):
def get(self, request, id):
cat = Category.objects.select_related().get(id=id)
p = Post.objects.filter(category_id=id).all()
cat_serializer = CategorySerializer(cat, many=True)
p_serializer = PostSerializer(p, many=True)
return Response({'cat': cat_serializer.data, 'p': p_serializer.data})
В views.py "GetCategory" пробую получить все посты конкретной категории, но это фиаско. То есть я иду по localhost://8000/api/category/
2
это мой урл для "GetCategory" path('api/category//', views.GetCategory.as_view()),
PS: Решение. Изменить class GetCategory
viewsclass GetCategory(APIView):
def get(self, request, id):
p = Post.objects.filter(category_id=id).all()
serializer = PostSerializer(p, many=True)
return Response(serializer.data)
и в urls.py заменить "pk" на "id"
path('api/category/<int:id>/', views.GetCategory.as_view()),