我有这样的模型,其中主题与房间相关,如代码所示。我如何计算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 ?请帮忙!!!!
您应该能够通过以下方式直接访问与每个主题相关的组的计数:
topic.room_set.count()
这是单独访问每个主题的情况。如果您想把它放到查询集上,那么使用annotate()
和Count()
。