我有一张包含以下内容的表格:
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_type
为Null
的情况下进行过滤,或者如果content_type
不是Null
,我希望能够检查{{1}在特定对象中的字段,并确保它是'Y'。我该如何进行比较?
我查了很多网站,包括以下内容:
http://ui.co.id/blog/generic-field-filtering-in-django
修改
我唯一的解决方案是在我循环的过滤器语句之后有一个active
,我消除了没有正确的for loop
字段的任何对象。这是低效的...有更好的方法吗?
答案 0 :(得分:0)
在这种情况下,你可能会做这样的事情:
result = []
result += Model.objects.filter(content_type__isnull=True)
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。