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__'