Django | Упорядочивание фильтров - Как реализовать "упорядочивание" при использовании @property
Помогите пожалуйста сделать правильный "заказ" для "пользовательского" свойства some_property_field. Я пишу такой URL и он не работает. Я так понимаю причина в "пользовательском" свойстве. Как это решить?
/api/articles/?ordering=-some_property_field
<router = DefaultRouter()
router.register(r'articles', ArticleViewSet, basename='articles')
urlpatterns = []
urlpatterns += router.urls
<
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__'
Упорядочивание выполняется в наборе запросов, поэтому вы можете использовать только то поле, которое существует в базе данных.
Если вы хотите упорядочить по свойствам, вам нужно сделать это в python:
qs = sorted(Article.objects.all(), key=lambda obj: obj.some_property_field)