这是问题所在。
我有一个表,其中包含将用户与GenericForeignKey定义的对象相关联的记录
我可以获得这些对象的列表:
association_objects = Association.objects.filter(user = request.user)
这将返回一个对象数组,我可以使用
访问相关对象association_object.context
所以我可以很容易地创建一个仅包含上下文对象的数组
现在我需要查询与上述Association数组中的任何对象相关的另一个表的所有记录。
在一个善良而神圣的宇宙中,我可以做类似
的事情Action.objects.filter(context__in = associations)
该表中的上下文也是GenericForeignKey
然而,GFK不能过滤其实际的关键属性。您必须同时按内容类型和主键进行过滤...
我该怎么办呢?我唯一明智的想法是将content_type和id分成两个独立的数组,并在两个属性上执行__in过滤器,但这似乎不会真正起作用。
有人有什么好主意吗?
答案 0 :(得分:2)
from django.contrib.contenttypes.models import ContentType
ct = ContentType.objects.get_for_model(Action)
action_ids = association_objects.values_list("object_id", flat=True)\
.filter(content_type=ct)
actions = Action.objects.filter(pk__in=action_ids)
(假设您的GenericForeignKey
包含content_type
和object_id
!)
答案 1 :(得分:-1)
试试这个:
# I assume that association_objects is a QuerySet
association_ids = association_objects.value_list("id", flat=True)
content_type = ContentType.objects.get_for_model(Association)
actions = Action.objects.filter(content_type=content_type,
object_id__in=association_ids)