django-notification:观察到的物品有多少
-
12-12-2019 - |
题
我在返回由观看它的人数排序的模型中返回数字项的QuerySet。所以我有一个表示此链接的M2M字段。
IE:
#models.py
class MyModel(models.Model):
...
watchers = models.ManyToManyField(User, blank=True)
.
我将计算出现的次数,并按视图使用的默认管理器中的计数命令。
现在,我现在要使用 django-notification ,使用'notification.observeditem'允许用户如果mymodel观看实例。所以在我的观点中,当用户发布一些内容时,我有这样的东西:
notification.observe(object, request.user, 'new_object')
.
这很好。
现在,如何生成代表Class MyModel类的所有对象的查询集,由人们观察它们的人数命令?
解决方案
您可以使用注释完成:
from django.db.models import Count
MyModel.objects.annotate(num_users=Count('watchers')).order_by('num_users')
. 其他提示
问题是Django-notification使用通用外键。
所以我重新定义了我的观察者字段:
watchers = generic.GenericRelation(notification.ObservedItem)
.
然后我可以获取所有观察者的mymodel的特定实例。
$x = MyModel.objects.get(id=1)
$x.watchers.all()
$[<ObservedItem: ObservedItem object>, <ObservedItem: ObservedItem object>, <ObservedItem: ObservedItem object>]
$x.watchers.count()
$3
.
关闭但没有雪茄。我想做的事情是这样的:
MyModel.objects.annotate(count=Count('watchers')).order_by('count')
.
django不能做的,根据文档。
django的数据库聚合API不适用于泛曲线。
不担心,我认为这可能有助于:
http://charlesleifer.com/blog/generation-aggregate -data-inferic-actions /
repo在这里:
https://github.com/coleifer/django-generic-aggregation < / p>
我还没有尝试过...
不隶属于 StackOverflow