У меня есть модель с именем 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