У меня есть модель темы форума, которую я хочу заказать на вычисленном SerializerMethodField, например vote_count. Вот очень упрощенная модель, Serializer и Viewset показать проблему:Django Rest Framework Ordering на SerializerMethodField
# models.py
class Topic(models.Model):
"""
An individual discussion post in the forum
"""
title = models.CharField(max_length=60)
def vote_count(self):
"""
count the votes for the object
"""
return TopicVote.objects.filter(topic=self).count()
# serializers.py
class TopicSerializer(serializers.ModelSerializer):
vote_count = serializers.SerializerMethodField()
def get_vote_count(self, obj):
return obj.vote_count()
class Meta:
model = Topic
# views.py
class TopicViewSet(TopicMixin, viewsets.ModelViewSet):
queryset = Topic.objects.all()
serializer_class = TopicSerializer
Вот что работает:
- OrderingFilter включен по умолчанию, и я могу успешно заказать
/topics?ordering=title
- Функция vote_count отлично работает
Я пытаюсь заказать методом MethodField на TopicSerializer, vote_count как /topics?ordering=-vote_count
, но кажется, что это не поддерживается. Есть ли способ заказать это поле?
Моего упрощенного ответа JSON выглядит следующим образом:
{
"id": 1,
"title": "first post",
"voteCount": 1
},
{
"id": 2,
"title": "second post",
"voteCount": 8
},
{
"id": 3,
"title": "third post",
"voteCount": 4
}
Я использую Ember потреблять мой API и анализатор превращает его в верблюжий. Я попытался упорядочения = voteCount, а также, но это не работает (и не должны)
отличный ответ, дал бы ему 2 голоса, если бы мог! Отлично работает и благодарит за последний отзыв о том, как избавиться от MethodField. – awwester