django:如何从ContentType实例中获取对象

时间:2017-11-25 13:19:13

标签: django django-contenttypes

我想从ContentType实例获取对象的查询集,然后能够过滤它们。从文档中,可以get()使用对象{<1}}。

ct.get_object_for_this_type(**kwargs)

如何为该实例制作类似的filter()

2 个答案:

答案 0 :(得分:5)

由于您拥有ContentType实例,因此可以ct.model_class()获取模型类,然后像往常一样使用它。

model_class = ct.model_class()
model_class.objects.filter(**kwargs)

答案 1 :(得分:1)

由于ContentType model有三个字段app_labelmodelname。因此,您可以轻松过滤这些字段。

notifications = Notification.objects.filter(content_type__model='Comment', object_id=1)

示例模型:

class Notification(models.Model):
    content_type = models.ForeignKey(ContentType, related_name='notifications', on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField(_('Object id'))
    content_object = GenericForeignKey('content_type', 'object_id')

    ....