【问题标题】:Get row separately for each category - django ORM为每个类别分别获取行 - django ORM
【发布时间】:2021-07-25 13:01:11
【问题描述】:

我有以下型号:

class Category(models.Model):
    name = models.CharField(max_length=100, null=False, blank=False)
    description = models.CharField(max_length=500, null=True, blank=True)


class Website(models.Model):
    ...
    category = models.ManyToManyField('Category', related_name='website_category')
    ...

由于每个网站可以有多个类别,所以我想为每个类别多次获取每个网站。

例如:

网站 1 具有类别:类别 1、类别 2
网站 2 有类别:类别 2、类别 3

所需输出:

Website Category
website 1 category 1
website 1 category 2
website 2 category 2
website 2 category 3

我对 Django ORM 比较陌生,无法构造查询来获取所需的结果,因此任何帮助都非常重要。

【问题讨论】:

  • 你试过Website.category.through.objects.all()吗?
  • 完美!非常感谢@JameelHamdan 这个“通过”是如何工作的?
  • models.ManyToManyField 创建一个连接表,.through 只是访问它

标签: python django django-models django-orm


【解决方案1】:

你可以通过这段代码得到创建的连接表

Website.category.through.objects.all()

【讨论】:

    【解决方案2】:

    要获取网站下的所有类别,

    web1 = Website.objects.get(id='your_id')
    web1.category.all()
    

    要获取类别下的所有网站,

    cat1 = Category.objects.get(id='your_id')
    cat1.website_set.all()
    

    【讨论】:

    • 我愿意通过 1 个查询获取结果。为每个类别获取网站的方法需要 2 个循环来显示结果
    • 你期待什么结果。
    • 问题中所述的结果。 “Website.category.through.objects.all()” 完成了这项工作!
    猜你喜欢
    • 2019-04-26
    • 1970-01-01
    • 2020-05-29
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多