具有多行的GenericForeignKey过滤问题

时间:2012-10-19 19:50:14

标签: orm django-models

我有一张包含以下内容的表格:

content_type = models.ForeignKey(ContentType, null=True, default=None)
object_id = models.PositiveIntegerField(null=True, default=None)
content_object = generic.GenericForeignKey('content_type', 'object_id')

我希望能够在content_typeNull的情况下进行过滤,或者如果content_type不是Null,我希望能够检查{{1}在特定对象中的字段,并确保它是'Y'。我该如何进行比较?

我查了很多网站,包括以下内容:

http://ui.co.id/blog/generic-field-filtering-in-django

修改

我唯一的解决方案是在我循环的过滤器语句之后有一个active,我消除了没有正确的for loop字段的任何对象。这是低效的...有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,你可能会做这样的事情:

情况1:

result = []
result += Model.objects.filter(content_type__isnull=True)

情况2:

active_object_ids = ObjectClass.objects.filter(active='Y').values_list('id', flat=True)
result += Model.objects.filter(object_id__in = active_object_ids)

唯一的缺点是在案例2中你可能必须收集由GFK链接的所有对象的所有id。此外,因为每当你保存content_object时,content_type随之保存,所以你不需要在第二种情况下测试content_type。