Как получить все сообщения с помощью post_status django rest api?

#django #api #django-rest-framework

Вопрос:

В моем проекте, как я могу получить все сообщения с post_status, как — публикация, ожидание, черновик, спам. Я хочу запросить с помощью post_status.

Почтовая модель

  ` 

class Post(models.Model):

    title = models.CharField(max_length=255)
    slug = models.CharField(max_length=255, unique= True,  editable=False)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    subtitle = models.CharField(max_length=255, null=True, blank=True)
    description = models.TextField(max_length=5555, null=True, blank=True)
    image = models.ImageField(blank=True, upload_to=post_image_path)
    image_caption = models.CharField(max_length=255, blank=True)
    post_status = models.CharField(max_length=255)
    comment_status = models.CharField(max_length=255)
    post_type = models.CharField(max_length=50)
    comment_count = models.IntegerField(null=True, blank=True)
    categories = models.ManyToManyField(Category,  blank=True)
    tags = models.ManyToManyField(Tag, blank=True)
    createdAt = models.DateTimeField(auto_now_add=True)
    updatedAt = models.DateTimeField(auto_now=True)


    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Post, self).save(*args, **kwargs)

    def __str__(self):
        return self.title

`
 

Serializer.py

 from .models import Post

class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = '__all__'
        read_only_fields = ['author']
 

Как реализовать в виду?

Ответ №1:

Приведенный ниже фрагмент кода должен работать для вашего запроса.

 class PostListView(generics.ListAPIView):
    serializer_class = PostSerializer

    def get_queryset(self):
        queryset = Post.objects.all()
        post_status = self.request.query_params.get('post_status')
        if username is not None:
            queryset = queryset.filter(post_status=post_status)
        return queryset
 

Вырезано адаптировано из фреймворка Django Rest — Фильтрация

Ответ №2:

views.py

 from django.db.models import Q
from .serializers import PostSerializer
from rest_framework.generics import ListAPIView
from .models import Post

class PostListAPIView(ListAPIView):
    serializer_class = PostSerializer

    def get_queryset(self):
        queryset = Post.objects.filter(Q(post_status__contains='publish') | Q(post_status__contains='pending') | Q(post_status__contains='draft') | Q(post_status__contains='spam'))
        return queryset
``