【发布时间】:2018-11-27 17:38:55
【问题描述】:
我需要在查询集中使用 ManyToMany 过滤字段。必须只保留有效的产品
class Product(model.Model):
name = models.CharField()
active = models.BooleanField(blank=True, default=True)
class Package(model.Model):
name = models.CharField()
products = models.ManyToManyField(Product)
我试过这样的。
packages = Package.objects.all()
for package in packages:
active_products = package.products.filter(active=True)
package.products = active_products
但是当我只需要更改查询集时,它会更新我在数据库中的包。
期望概念(其实不需要嵌套结构,查询集就可以了):
packages = [
{'id': 1, 'name': 'First package', 'products': [
{'id': 1, 'name': 'first product', 'active': True},
{'id': 2, 'name': 'second product', 'active': True},
]},
{'id': 2, 'name': 'Second package', 'products': [
{'id': 2, 'name': 'first product', 'active': True},
{'id': 3, 'name': 'third product', 'active': True},
]},
{'id': 3, 'name': 'Third package', 'products': []}
]
我想过通过 .values() 从 Packages 中创建一个字典列表,然后对其进行迭代并排除所有非活动产品。 你知道更优雅的方法吗?
【问题讨论】:
-
你在使用 Django REST 框架吗?
-
@JPG,是的,但我想在没有序列化的情况下在常规 django 中制作
标签: django filter many-to-many