Django | Как заставить работать ordering по полям созданным в модели через @property

Как заставить выполнять фильтрацию для полей созданных в модели через @property? Да, эти поля в БД не хранятся, но должен быть какой-то обход этого кейса

/api/articles/?ordering=-some_property_field

urls.py

router = DefaultRouter()
router.register(r'articles', ArticleViewSet, basename='articles')
urlpatterns = []

urlpatterns += router.urls

models.py

class Article(models.Model):
    title = models.CharField(max_length=20)
    description = models.TextField()

    def __str__(self):
        return self.title

    @property
    def some_property_field(self):
        return f'{self.title} property func'

views.py

class ArticleViewSet(viewsets.ModelViewSet):
    serializer_class = ArticleSerializer
    queryset = Article.objects.all()
    filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter,)
    ordering_fields = ('id', 'title', 'some_property_field')
    ordering = ('id',)  # default ordering

serializers.py

class ArticleSerializer(serializers.ModelSerializer):
    some_property_field = serializers.CharField(read_only=True)

    class Meta:
        model = Article
        fields = '__all__'
Вернуться на верх