【问题标题】:How to Get All Posts with post_status django rest api?如何使用 post_status django rest api 获取所有帖子?
【发布时间】:2021-06-16 11:01:30
【问题描述】:

在我的项目中,如何获取所有 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

`

序列化器.py

from .models import Post

class PostSerializer(serializers.ModelSerializer):

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

视图中如何实现?

【问题讨论】:

    标签: django api django-rest-framework


    【解决方案1】:

    下面的 sn-p 应该适用于您的查询。

    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 Framework - Filtering

    【讨论】:

      【解决方案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
      ``
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-12
        • 1970-01-01
        • 2018-04-05
        • 1970-01-01
        • 1970-01-01
        • 2021-04-06
        • 2017-10-12
        • 2015-11-30
        相关资源
        最近更新 更多