如何通过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**来过滤:
- 筛选属于单个分类ID的公司:
# 两种写法均有效 Company.objects.filter(category__id=category_id) Company.objects.filter(category=category_id) # Django支持直接传入ID值
- 筛选属于多个分类ID的公司:
Company.objects.filter(category__id__in=[category_id1, category_id2])
- 也可以通过分类对象反向查询关联公司:
Category.objects.get(id=category_id).companies.all()
无效原因说明
你用到的companies__xxx是Category模型的反向关联名称(由related_name='companies'定义),仅能在Category的查询或实例中使用,不能直接作为Company模型的过滤字段。
内容的提问来源于stack exchange,提问作者Leonhardphilipp Lydkasänger
相关产品推荐
相关产品推荐

