gam*_*mer 5 python django django-queryset
我有问题的模型:
class Question(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=120)
description = models.TextField()
answers = models.ManyToManyField('Answer',related_name='answer_name', blank=True)
post_date = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
我有回答的模型:
class Answer(models.Model):
user = models.ForeignKey(User)
question = models.ForeignKey(Question)
ans_body = models.TextField()
post_date = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.ans_body
Run Code Online (Sandbox Code Playgroud)
问题创建和答案提交工作完美.我无法正确显示特定问题的答案.但是,当我试图得到特定问题的答案时,它没有显示出来.它显示0计数.
在我看来,我得到的答案列表:
context["question_list"] = Question.objects.all()
Run Code Online (Sandbox Code Playgroud)
在我的模板中
{% for question in question_list %}
{{ question.title }}
Ans:{{question.answers.count}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,如果有答案我得到计数0.如何获得特定问题的答案计数.
这有效:
{{question.answer_set.count}}
Run Code Online (Sandbox Code Playgroud)
快乐..
你可以做类似的事情{{ question.answers.all.count }},但是如果你不仅仅是问题,那么它将导致每个问题的数据库查询.
如果要使用每个问题的计数来注释整个查询集:
from django.db.models import Count
context['question_list'] = Question.objects.all().annotate(
answer_count=Count('answers')
)
Run Code Online (Sandbox Code Playgroud)
然后,您可以访问每个问题的计数{{ question.answer_count }}.
为什么不使用:Question.objects.all().count()
对于我的项目,我在“信息”模型中有一个字段
users_like = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="%(app_label)s_%(class)s_likes", blank=True)
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码来计算喜欢的数量,然后将其显示在管理列表页面中。
# admin.py
from django.contrib import admin
from .models import Info
class InfoAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'like_count',)
def like_count(self, obj):
return obj.users_like.all().count()
admin.site.register(Info, InfoAdmin)
Run Code Online (Sandbox Code Playgroud)
结果是:
希望这些可以帮助到你!
| 归档时间: |
|
| 查看次数: |
8181 次 |
| 最近记录: |