Ho un modello di argomento del forum che desidero ordinare su un SerializerMethodField calcolato, ad esempio vote_count. Qui ci sono un modello molto semplificato, Serializer e ViewSet per mostrare il problema:Ordine di restituzione di Django Framework su un 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
Ecco cosa funziona:
- OrderingFilter è attivata per impostazione predefinita e posso ordinare con successo
/topics?ordering=title
- La funzione vote_count funziona perfettamente
Sto cercando di ordinare dal MethodField su TopicSerializer, vote_count come /topics?ordering=-vote_count
ma sembra che non sia supportato. C'è un modo che posso ordinare da quel campo?
La mia risposta semplificata JSON è simile al seguente:
{
"id": 1,
"title": "first post",
"voteCount": 1
},
{
"id": 2,
"title": "second post",
"voteCount": 8
},
{
"id": 3,
"title": "third post",
"voteCount": 4
}
sto usando Ember a consumare il mio API e il parser si sta trasformando a camelCase. Ho provato l'ordinazione = voteCount pure, ma che non funziona (e non dovrebbe)
ottima risposta, gli darei 2 voti se potessi! Funziona perfettamente e grazie per l'ultimo consiglio su come sbarazzarsi del MethodField. – awwester