我知道count只能应用于IntegerField或FloatField但我已经为另一个包含hitcounts的模型创建了一个ForeignKey。现在我需要根据相关模型的最大计数来过滤结果,但我无法对其进行点击。
models.py:
class Product(models.Model):
title = models.CharField(max_length=120)
description = models.TextField(blank=True, null=True)
price = models.DecimalField(decimal_places=2, max_digits=20)
active = models.BooleanField(default=True)
categories = models.ManyToManyField('Category', blank=True)
default = models.ForeignKey('Category', related_name='default_category', null=True, blank=True)
hits = models.ForeignKey(HitCount)
objects = ProductManager()
class Meta:
ordering = ["-title", '-hits']
我们的想法是访问Hitcount字段匹配以按最大计数计算最大值和排序列表。以下是作为第三方可重复使用的应用程序djagno-hitcount安装的Hitcount模型。
class HitCount(models.Model):
hits = models.PositiveIntegerField(default=0)
modified = models.DateTimeField(auto_now=True)
content_type = models.ForeignKey(
ContentType, related_name="content_type_set_for_%(class)s", on_delete=models.CASCADE)
object_pk = models.PositiveIntegerField('object ID')
content_object = GenericForeignKey('content_type', 'object_pk')
objects = HitCountManager()
class Meta:
ordering = ('-hits',)
get_latest_by = "modified"
verbose_name = _("hit count")
verbose_name_plural = _("hit counts")
unique_together = ("content_type", "object_pk")
db_table = "hitcount_hit_count"
我需要使用不同的列表调用多个应用中的产品,并且在我的主页视图中,我尝试使用如下所示的过滤器选项:
from django.db.models import Max, Sum, Count
product1 = Product.objects.all().annotate(hits=Count('-hits__hits'))[:6]
或
product1 = Product.objects.all().order_by('-hits__hits')[:6]
并且几乎没有不同的过滤选项。我无法使它工作,所以建议将不胜感激。