【问题标题】:django: iterating over items in ManyToMany table without intermediate model (without using 'through')django:在没有中间模型的情况下迭代 ManyToMany 表中的项目(不使用“通过”)
【发布时间】:2011-05-05 15:39:45
【问题描述】:

我有一个包含 2 个模型的简单案例:Item 和 Category,它们之间有 ManyToMany。我想显示一个页面,列出所有类别和每个类别的项目列表。我有数百个类别,所以 django 会点击 db 数百次(在遍历类别并为每个类别调用 items.all() 时)。我需要手动从中间表中选择数据并使用 select_related() 为每条记录提取项目和类别——一个查询而不是数百个。

我知道引入 'through' 可以解决问题,但我现在不想这样做,因为它可能会破坏现有代码(使用 through 会使您无法使用 add、create 或 assignment 来创建关系 - 这我现在想避免)。

那么,是否有可能不为中间表创建模型?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    您可以为现有表创建一个模型,只是不将其用作 m2m 的直通字段,并使其不受管理。例如:

    class ItemCategory(models.Model):
        item = models.ForeignKey('Item')
        category = models.ForeignKey('Category')
    
        class Meta:
            db_table = 'the_name_of_the_existing_m2m_table'
            managed = False
    

    反正就是这样。

    【讨论】:

    • 谢谢,这就是我要找的。​​span>
    • 我必须将 app_label 添加到 Meta 类才能让我的修复工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2016-06-16
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多