从Django查询中排除null GenericForeignKey对象

时间:2013-08-26 03:36:47

标签: django django-models generic-foreign-key

我有一个ActivityLog Django模型,用以下字段定义通用外键:

model_type = models.ForeignKey(ContentType, verbose_name=_("Object type"))
object_id = models.PositiveIntegerField(_("Object id"))
object = generic.GenericForeignKey('model_type', 'object_id')

我需要过滤相关ActivityLog尚未删除的object个实例(不是None)。 Django没有在GenericForeignKey中执行删除级联,我需要从查找中排除这些不需要的记录。有一种简单,标准和有效的方法吗?

在一个美好的世界里,我会使用类似的东西:

real_activity_logs = ActivityLog.objects.filter(object__isnull=False)

但这并不起作用,因为object不是数据库字段。

1 个答案:

答案 0 :(得分:1)

如果希望在级联中删除这些ActivityLog实例,可以通过在指向的对象上定义GenericRelation来实现。来自documentation

  

另请注意,如果删除具有GenericRelation的对象,则具有任何对象   指向它的GenericForeignKey也将被删除。