【问题标题】:Items of a Model are not counting seperatly模型的项目不单独计算
【发布时间】:2021-05-16 05:33:29
【问题描述】:

我正在构建一个 BlogApp,但遇到了一个问题。

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

我想要做什么:-

Albummodel 中有两个fields,我正在尝试分别count file and video。当我使用{{ file.count }} 计算template 时,它会计算所有文件和视频,但是当我尝试单独计算{{ file.video.count }} 时,它没有显示。

我不知道,我怎么能分开计算。

【问题讨论】:

  • 参见 Django 文档中的 Aggregation 章节
  • @yedpodtrzitko,但我没有multiple models
  • 是的,你绝对应该阅读这一章。
  • 我之前已经读过但是我没有找到aggregation 只在模型上
  • 你应该得到错误...因为file 不包含video...它是一个查询集...不是单个对象...

标签: python django django-views


【解决方案1】:

{{ 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()

【讨论】:

  • 感谢您的努力。但它仍在计算file 对象。我只是试着数一下video objects
  • 当我添加文件(不是视频)并计算视频时,数字会增加
  • 你能试试video_count = file.exclude(video='').count()吗?
猜你喜欢
  • 2012-12-28
  • 2018-09-29
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 2019-09-09
  • 2023-03-10
相关资源
最近更新 更多