Как подсчитать top_topics на основе количества групп, созданных по этой теме в django?
У меня есть такие модели, где тема связана с комнатой, как показано в коде. Как я могу подсчитать top_topics, как я подсчитал top_groups. Я хочу подсчитывать top_topics на основе количества групп, созданных по этой теме. Надеюсь, вы поняли, о чем я.
Models.py
class Topic(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Room(models.Model):
admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
topic = models.ForeignKey(Topic, on_delete=models.SET_NULL, null=True)
group_photo = models.ImageField(null=True, upload_to = 'images/', default='avatar.svg')
name = models.CharField(unique=True, max_length=100)
description = models.TextField(null=True, blank=True)
members = models.ManyToManyField(User, related_name='members', blank=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-created']
def __str__(self):
return self.name
Views.py
def home(request):
q = request.GET.get('q') if request.GET.get('q') != None else ''
groups = Room.objects.filter(Q(topic__name__icontains=q)|
Q(name__icontains=q) |
Q(description__icontains=q)
)
top_groups = Room.objects.alias(
num_members = Count('members')
).order_by('-num_members')[:5]
group_count = groups.count()
topics = Topic.objects.all()[:5]
context = {'groups':groups, 'group_count':group_count, 'topics':topics, 'top_groups':top_groups}
return render(request, 'base/home.html', context)
Я запутался в отношениях. каким образом я могу получить доступ к комнате из темы? Пожалуйста, помогите !!!!
Вы должны иметь возможность напрямую получить доступ к подсчету групп, связанных с каждой темой по:
topic.room_set.count()
В этом случае вы получаете доступ к каждой теме в отдельности. Если вы хотите поместить ее в набор вопросов, используйте annotate()
и Count()
.