문제

나는 그것을 보는 사람들의 수가 주문한 모델의 숫자 항목을 반환하는 순간에 queryset을 가지고 있습니다.따라서이 링크를 나타내는 M2M 필드가 있습니다.

IE :

#models.py
class MyModel(models.Model):
...
watchers = models.ManyToManyField(User, blank=True)
.

i는 어커런스 수를 계산하고 기본 관리자에서 view에서 사용한 기본 관리자에서 수로 명령합니다.

이제는 "NoFollow"> Django-Notification 를 사용하여 사용합니다.'사용자가 myModel 인 경우 인스턴스를 볼 수있게합니다.

그래서 사용자가 일부 콘텐츠를 게시 할 때 다음과 같은 내용을 게시 할 때 :

notification.observe(object, request.user, 'new_object')
.

이것은 잘 작동합니다.

이제, 사람들이 관찰하는 사람들의 수에 의해 주문 된 클래스 mymodel의 모든 객체를 나타내는 queryset을 어떻게 생성 할 수 있습니까?

도움이 되었습니까?

해결책

주석을 사용하여이를 수행 할 수 있습니다.

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는 GenericRelation에서 작동하지 않습니다.

걱정하지 않으려는 경우, 나는 이것이 도움이 될 것입니다 :

http://charlesleifer.com/blog/generating-ggragate. - 다다운전 - 양호품 /

repo는 다음과 같습니다 :

https://github.com/coleifer/django-generic-ggregation <. / P>

아직 그것을 시도하지 않았습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top