после борьбы в этой задаче я не понимаю, каким образом существует способ обозначить эти поля как поле модели и не требовать пользовательского заказа и каких-либо дополнительных кодов!в моей функции get_queryset я изменяю код:
queryset = Dealer.objects.all()
на:
queryset = Dealer.objects.all().annotate(bids_count=Count('bid'), device_count=Count('device'))
обратите внимание, что эти два поля в моем сериализаторе отсутствуют в моей модели.в моем сериализаторе измените это поле с SerializerMethodField на IntegerField и очистите defs.
, затем в моем файле API добавьте следующее:
filter_backends = (filters.OrderingFilter,)
ordering_fields = ('bids_count', 'device_count')
это мой последний сериализатор:
class DealerListSerializer(serializers.ModelSerializer):
device_count = serializers.IntegerField()
bids_count = serializers.IntegerField()
class Meta:
model = Dealer
fields = ('id', 'last_name', 'first_name', 'username', 'person_trust', 'is_active',
'work_type', 'address', 'mobile', 'device_count', 'online', 'bids_count')
таким образом, мой код очень ясен, а мой CustomOrdering и все операторы elif также чисты!