gpt4 book ai didi

python - 过滤 manytoone 关系,根据条件排除 child

转载 作者:行者123 更新时间:2023-11-28 22:20:19 26 4
gpt4 key购买 nike

我与类别和产品有一对多关系,类别和产品有事件字段,如果其中任何一个不活动,我想将它们从列表中排除。

categories = Category.objects.filter(is_active=True)

但现在类别可以有很多产品,其中一些是非事件的,我如何从所有类别中过滤和排除非事件产品?

模型:

class Category(MPTTModel):
name = models.CharField(max_length=50, blank=False, unique=True)
is_active = models.BooleanField(default=True)
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children', db_index=True)

class Product(models.Model):
name = models.CharField(max_length=50, blank=False, unique=True)
is_active = models.BooleanField(default=True)
category = TreeForeignKey('Category', on_delete=models.CASCADE, null=True, blank=True, db_index=True)

最佳答案

如果您需要过滤相关产品,您可以使用prefetc_related使用 Prefetch 对象:

from django.db.models import Prefetch
categories = Category.objects.filter(is_active=True).prefetch_related(Prefetch('product_set', queryset=Produc.objects.filter(is_active=True)))

在这种情况下,对于来自 categories 此代码的每个类别

category.product_set.all()

将仅返回事件产品。此外,此查询集不会命中数据库,因为相关产品将由第一个查询缓存。

关于python - 过滤 manytoone 关系,根据条件排除 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49028854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com