Задать вопрос
google_online
@google_online
My morning begins with coffee and Twitter.

Как вывести все посты конкретной категории?

Использую DRF. Есть две простые модели "Post", "Category". Не знаю как отобразить все посты которые принадлежат конкретной категории.
models.py
class 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.py
from . 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.py
from 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
views
class 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()),
  • Вопрос задан
  • 526 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы