Mam model forum, który chcę zamówić na obliczonej SerializerMethodField, takiej jak vote_count. Oto bardzo uproszczony model, serializer i ViewSet pokazać problem:Django Rest Framework Zamawianie na 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
Oto, co działa:
- OrderingFilter jest domyślnie włączona i powodzeniem mogę zamówić
/topics?ordering=title
- Funkcja vote_count działa idealnie
Próbuję zamówić przez MethodField na TopicSerializer, vote_count jak /topics?ordering=-vote_count
, ale wygląda na to, że nie jest obsługiwane. Czy istnieje sposób, w jaki mogę zamówić przez to pole?
Moja uproszczona odpowiedź JSON wygląda następująco:
{
"id": 1,
"title": "first post",
"voteCount": 1
},
{
"id": 2,
"title": "second post",
"voteCount": 8
},
{
"id": 3,
"title": "third post",
"voteCount": 4
}
Używam Ember zużywają moje API i parser zamienia go CamelCase. Próbowałem zamawiania = voteCount jak dobrze, ale to nie działa (i nie powinien)
wspaniała odpowiedź, dałbym mu 2 głosy, gdybym mógł! Działa doskonale i dziękuje za ostatnią wskazówkę o pozbyciu się Metodego Pola. – awwester