You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ID筛选Django ManyToManyField关联的Company对象

如何通过分类ID筛选Django的Company模型对象

你的模型定义:

class Category(models.Model):
    name = models.CharField(max_length=255)

class Company(models.Model):
    name = models.CharField(max_length=255)
    category = models.ManyToManyField(Category, related_name='companies')
    products = models.TextField()
    bulletpoints = models.TextField()
    website = models.CharField(max_length=750)
    articles = models.TextField()

正确的筛选方法

你之前的错误在于误用了反向关联名称companies,在Company模型的查询中,必须使用**正向关联的字段名category**来过滤:

  1. 筛选属于单个分类ID的公司:
# 两种写法均有效
Company.objects.filter(category__id=category_id)
Company.objects.filter(category=category_id)  # Django支持直接传入ID值
  1. 筛选属于多个分类ID的公司:
Company.objects.filter(category__id__in=[category_id1, category_id2])
  1. 也可以通过分类对象反向查询关联公司:
Category.objects.get(id=category_id).companies.all()

无效原因说明

你用到的companies__xxx是Category模型的反向关联名称(由related_name='companies'定义),仅能在Category的查询或实例中使用,不能直接作为Company模型的过滤字段。

内容的提问来源于stack exchange,提问作者Leonhardphilipp Lydkasänger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:02:39