我正在构建一个博客应用程序,但遇到了一个问题。
models.py
class Album(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE,default='',null=True)
file = models.ImageField(upload_to='posts',null=True,blank=True)
video = models.FileField(upload_to='videos',null=True,blank=True)
views.py
def new_story(request):
file = Album.objects.filter(user=request.user)
context = {'file':file}
return render(request, 'mains/new_story.html', context)
当我count
使用
video_limit = Album.objects.filter(user=request.user,video__isnull=False).count()
然后它也计算 file
个对象,但我正在尝试 count only video objects
。
我想做什么:-
fields
模型中有两个 Album
,我正在尝试分别 count file and video
。当我使用 template
在 {{ file.count }}
中计数时,它会计算所有文件和视频,但是当我尝试单独计算 {{ file.video.count }}
时,它不会显示。
我不知道,我如何单独计算。
答案 0 :(得分:0)
{{ file.video.count }}
是空的,因为文件是一个查询集并且它没有“视频”属性。
您可以在不使用聚合的情况下实现您想要的。最简单的方法是单独存储视频计数并将其传递给上下文:
def new_story(request):
file = Album.objects.filter(user=request.user)
video_count = file.filter(video__isnull=False).count()
context = {
'file': file,
'video_count': video_count
}
return render(request, 'mains/new_story.html', context)
在您的模板中,您可以只使用 {{ video_count }}
更新:
尝试将 video_count 替换为以下内容:
video_count = file.exclude(video='').count()
或
from django.db.models import Q
video_count = file.filter(Q(video__isnull=True) | ~Q(video='')).count()