Django:我可以使用过滤器返回一个条件在整个相关集合中有效的对象吗?

2024-10-01 19:21:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我的对象设置如下:

class Event(Model):
    pass

class Inventory(Model):
    event = OneToOneField(Event)

    def has_altered_item_counts(self):
        return any(obj.field_one is not None or obj.field_two is not None for obj in self.itemcounts_set.all())

class ItemCounts(Model):
    inventory = ForeignKey(Inventory)
    field_one = IntegerField(blank=True, null=True)
    field_two = IntegerField(blank=True, null=True)

基本上,我想在Event上进行唯一筛选,其中inventory.has_altered_item_counts将返回False

我有

Q(inventory__itemcounts__field_one__isnull=True) & \
Q(inventory__itemcounts__field_two__isnull=True)

但每次满足这些条件时,它都会返回事件。考虑到这个结果,如果事件出现的次数小于项目计数的总数,我想排除该事件。这些有什么意义吗?用filter这可能吗?我真的有点需要它,这是以编程方式构建的批处理的一部分update


Tags: eventtrueobjfieldmodel事件itemone
1条回答
网友
1楼 · 发布于 2024-10-01 19:21:50

最后我在一个“先获取我试图排除的PKs,然后排除那些PKs”中完成了

其他人感兴趣的例子:

counts = Q(inventory__itemcounts__field_one__isnull=False) | \
         Q(inventory__itemcounts__field_two__isnull=False)

bad_pks = set(Event.objects.filter(counts).values_list("pk", flat=True))
Event.objects.exclude(pk__in=bad_pks).update(stuff)

很有魅力

相关问题 更多 >

    热门问题