在我的Product模型中,我有一個函式total_thumbs_up可以計算有多少用戶為此產品豎起大拇指。
class Product(models.Model):
class ProductObjects(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(status='published')
objects = models.Manager()
thumbs_up = models.ManyToManyField(
settings.AUTH_USER_MODEL, related_name="product_thumbs", blank=True)
def total_thumbs_up(self):
return self.thumbs_up.count()
在我的視圖檔案中,我有兩個這樣的類。我需要按 thumbs_up 的數量獲取排序的產品,但這條線('-thumbs_up', '0'),不能正常作業。我需要有類似的東西('-total_thumbs_up', '0'),。我怎樣才能把它放在那里?
class ProductFilter(django_filters.FilterSet):
order_by_field = 'ordering'
ordering = OrderingFilter(
fields=(
('-thumbs_up', '0'),
('price', '1'),
('-price', '2'),
('id', '3'),
('-published', '4'),
)
)
class ProductViewSet(viewsets.ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
permission_classes = [IsAuthenticatedOrReadOnly]
pagination_class = Pagination
filter_backends = [DjangoFilterBackend,
filters.OrderingFilter, filters.SearchFilter]
parser_classes = [MultipartJsonParser, parsers.JSONParser]
search_fields = ['name']
filter_class = ProductFilter
...
uj5u.com熱心網友回復:
就像是:
from django.db.models import Count
ordered_products = Product.objects.all().annotate(
thumbs_count = Count('thumbs_up')
).order_by('-thumbs_count')
注意,帶注釋的名稱thumbs_count必須不同于模型的方法名稱total_thumbs_up。
編輯:
在你的ModelViewSet你可以做:
class ProductViewSet(...):
...
queryset = Product.objects.all().select_related(
'thumbs_up'
).annotate(
thumbs_count = Count('thumbs_up')
).order_by(
'-thumbs_count'
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/506634.html
