gpt4 book ai didi

python - Django GenericRelated 字段条件查询引发 'GenericRelation' 对象没有属性 'field'

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:01 28 4
gpt4 key购买 nike

我有一个事件对象,除了 Notes 之外,还有其他对象与 Event 有一般关系,并且没有事件字段。现在我希望能够编写一个查询来排除所有 Events,其中 Notes 的事件字段为 False。所以我尝试执行以下操作。

queryset = Event.objects.all()
filters = (
Q(content_type__model='notes') &
Q(note__active=False)
)
queryset = queryset.exclude(filters)

这不起作用,因为它单独运行查询,并且当它尝试为没有 content_object 或类型不是 Notes 的项目执行时,它失败并给出以下内容错误:

AttributeError 'GenericRelation' object has no attribute 'field'.

class Event(models.Model):
content_type = models.ForeignKey(ContentType, null=True, blank=True)
object_id = models.PositiveIntegerField(null=True, blank=True)
content_object = GenericForeignKey('content_type', 'object_id')

class Notes(models.Model):
active = models.BooleanField(default=True)
event_log = GenericRelation(
'Event',
related_query_name='note'
)

最佳答案

使用 Django ORM 的常用方法是使用子查询:

Event.objects.exclude(
content_type=note_content_type,
object_id__in=Notes.objects.filter(active=False),
)

可悲的是,这可以用连接而不是子查询在SQL 中表示,但ORM 并没有使这变得容易。

在某些情况下,PostgreSQL 的查询规划器可以将子查询优化为 hash semi join ,所以在没有对数据进行基准测试的情况下,不要优先于原始 SQL 而忽略子查询。

关于python - Django GenericRelated 字段条件查询引发 'GenericRelation' 对象没有属性 'field',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41730894/

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