Bar*_*vds 5 python django django-polymorphic
我有一个普通的 Django 模型,它与 django 多态模型有外键关系。
让我们将第一个PlainModel具有contentForeignKey 字段的字段调用为具有子类型和 的多态Content模型(简化示例)。VideoAudio
现在我想查询PlainModel引用Video.
问题是我找到的所有文档都是关于直接通过多态模型本身进行过滤的。所以在这个例子中类似的东西Content.objects.instance_of(Video)。但我需要PlainModel's,所以它需要看起来像PlainModel.objects.filter(content__instance_of=Video)。我尝试了很多变体,但找不到任何有效的方法。
在他们使用的文档中Q(instance_of=ModelB),但这不适用于关系 as Q(content__instance_of=ModelB)。它给出了类似“无法查询“x”:必须是“y”实例”的错误。即使有翻译调用,我猜也是因为 PlainModel 不具有多态性。
我有一个临时 hack,可以polymorphic_ctype使用常规 django 过滤器(例如 )直接在字段上进行过滤PlainModel.objects.filter(content__polymorphic_ctype_id=my_content_type_id),但这不处理子类。例如:ExtendedVideo查找时找不到Video,因为它会有不同的 ContentType id。
我可以解决这个问题并保留允许的子类型列表或解析类型层次结构以获取过滤器的更多内容类型,但这似乎重复了 django-polymorphic 的功能。
您可以通过首先获取PlainModel具有Video子类型的所有实例,然后查询该查询集中的外键关系来完成此操作:
content_videos = Content.objects.instance_of(Video)
plain_model_videos = PlainModel.objects.filter(content__in=content_videos)
Run Code Online (Sandbox Code Playgroud)
请参阅文档以供参考。
| 归档时间: |
|
| 查看次数: |
1228 次 |
| 最近记录: |