Django Сериализатор остального каркаса для данных по категориям - PullRequest
0 голосов
/ 19 марта 2020

У меня есть модель с именем JobTite :

class JobTitle(BaseModel):
    """
    Store job titles used in benchmarking
    """

    benchmark_role = models.ForeignKey(
        BenchmarkRole,
        on_delete=models.SET_NULL,
        related_name='job_titles',
        null=True,
        blank=True
    )

    name = models.TextField()
    description = models.TextField(null=True, blank=True)
    count = models.IntegerField(
        validators=[MinValueValidator(0)],
        null=True,
        blank=True
    )

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['benchmark_role', 'name'], name='unique_job_title')
        ]

    def __str__(self):
        return "{}-{}".format(self.benchmark_role, self.name)

Мне нужно получить 10 лучших JobTtles для каждого benchmark_role и вернуть JSOn примерно так:

[{"benchmark_role_1": [
         {name: "ABC", desc: 'DESC', count: 9},
         {name: "def", desc: 'DESC', count: 6},
         {name: "XR", desc: 'DESC', count: 4},
         {name: "AS", desc: 'DESC', count: 2},
         {name: "RE", desc: 'DESC', count: 3},
         {name: "Q", desc: 'DESC', count: 1},
         {name: "QW", desc: 'DESC', count: 0},
         {name: "AS", desc: 'DESC', count: 0},
         {name: "W", desc: 'DESC', count: 0},
         {name: "EW", desc: 'DESC', count: 0},

]}, {"benchmark_role_2": [
         {name: "AAC", desc: 'DESC', count: 8},
         {name: "dAf", desc: 'DESC', count: 6},
         {name: "QW", desc: 'DESC', count: 4},
         {name: "AS", desc: 'DESC', count: 2},
         {name: "QE", desc: 'DESC', count: 3},
         {name: "Q", desc: 'DESC', count: 1},
         {name: "QW", desc: 'DESC', count: 0},
         {name: "AS", desc: 'DESC', count: 0},
         {name: "W", desc: 'DESC', count: 0},
         {name: "EW", desc: 'DESC', count: 0},

]}, ...]

Мой текущий сериализатор выглядит так:

class JobTitleSerializer(serializers.ModelSerializer):

    benchmark_role = serializers.PrimaryKeyRelatedField(
        read_only=True,
        many=False
    )

    class Meta:
        model = JobTitle
        fields = '__all__'

, и мой набор просмотра:


class JobTitleViewSet(viewsets.ModelViewSet):
    """
    Provides CRUD operations on job titles
    """
    def get_queryset(self):
        return JobTitle.objects.annotate(Count('count'))

    serializer_class = JobTitleSerializer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...