【问题标题】:Is there any possible solution for getting more than one value inside function in django?是否有任何可能的解决方案可以在 django 中的函数内部获取多个值?
【发布时间】:2019-02-24 12:59:36
【问题描述】:

我正在使用 Django 创建一个博客应用程序,而且我对 django 也很陌生。

这是我创建的模型

class categories(models.Model):
    Title = models.CharField(max_length=40, default='GST')





class Blog(models.Model):
    User = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,blank=True)
    Date = models.DateTimeField(default=datetime.now)
    Blog_title = models.CharField(max_length=255)
    likes = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='likes',blank=True)
    Description = RichTextUploadingField(blank=True, null=True,config_name='special')
    Blog_image = models.ImageField(upload_to='blog_image', null=True, blank=True)
    Category = models.ForeignKey(categories,on_delete=models.CASCADE,related_name='blogs')

我想知道如何计算特定类别下的博客总数?

我想跟踪所有类别的特定计数率...

在我的模型中做这样的事情

    def categories_count(self):
    for a in categories.objects.all():
        categories_count = Blog.objects.filter(Category__Title=a.Title).count()
        return categories_count

但它只返回一个值...谁能建议我用一些合适的代码来解决这个问题...

谢谢

【问题讨论】:

  • 您可以构造一个列表,为Category 对象添加一个属性,但最好是简单地注释您的查询集。此外,在此处使用title有风险的:如果两个类别具有相同的标题,则类别将“相加”,此外,计数将执行JOIN,这会降低查询效率。
  • 上一篇文章中已经回答了您的问题:stackoverflow.com/a/52419681/10090254
  • 你能给我提供符合这个查询的合适代码吗???@Willem Van Onsem

标签: django django-models


【解决方案1】:

您可以通过以下查询获得类别标题和博客计数的元组列表:

categories.objects.annotate(blog_count=Count('Categories')).values_list('Title', 'blog_count')

【讨论】:

  • 它向我显示此错误“无法将关键字“博客”解析到字段中。选项有:类别、标题、id'...
  • @NiladryKar:是的,那是因为你没有接受建议来修复命名法以及违反 PEP-8 并基于其他可能违反十几个设计原则的问题:)
  • @NiladryKar 已修复。没有注意到您的related_nameBlog.Category。正如 WillemVanOnsem 在上一个问题中已经指出的那样,您应该将其重命名为 blogs
  • 是的,对不起,我应该早点做的...对不起@Willem Van Onsem....
  • 非常感谢@blhsing...这对我来说是救命稻草
猜你喜欢
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多