【问题标题】:drf filter with related table count具有相关表计数的 drf 过滤器
【发布时间】:2022-01-10 10:13:29
【问题描述】:

这是我的模型:

    class Artwork(models.Model):
        id                = models.BigAutoField(primary_key = True)
        serial            = models.IntegerField(choices=Serial.choices, default=100)
        title             = models.CharField(max_length=255, blank=True, null=True)
        slug              = models.CharField(max_length=255, blank=True, null=True)


    class Views(models.Model):
        id        = models.BigAutoField(primary_key = True)
        user    = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE, related_name="views")
        artwork = models.ForeignKey(Artwork, null=True, blank=True, on_delete=models.CASCADE, related_name="views")

这是我的看法

    class GetArtworkLiteView(viewsets.ModelViewSet):
        queryset = Artwork.objects.all()
        serializer_class = GetArtworkLiteSerializer

        filter_backends = [filters.OrderingFilter, DjangoFilterBackend]
        filterset_fields = ['slug']
        ordering_fields = ["id", "serial"]

在这里,我想在艺术品模型中按计数(视图)进行排序。 我如何为其添加逻辑,以便艺术品模型按观看次数排序 我想使用 django rest 框架来实现这个

【问题讨论】:

标签: django django-rest-framework


【解决方案1】:
queryset = Artwork.objects.annotate(count=Count('views')).order_by('-count')

【讨论】:

    【解决方案2】:

    您必须将排序应用于视图的查询集。无论是否使用 DRF,排序本身都应该工作。

    改变你的视图类:

        from django.db.models import Count
    
    ...
    
        class GetArtworkLiteView(viewsets.ModelViewSet):
            queryset = Artwork.objects.annotate(count=Count('views_set__id')).order_by('count')
            serializer_class = GetArtworkLiteSerializer
    
            filter_backends = [filters.OrderingFilter, DjangoFilterBackend]
            filterset_fields = ['slug']
            ordering_fields = ["id", "serial"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2020-12-23
      • 2021-06-29
      • 2020-04-26
      • 2020-07-14
      相关资源
      最近更新 更多