过滤DJango ContentType查询集以仅包含具有特定方法的模型

时间:2015-08-30 16:06:24

标签: python django django-contenttypes

如何将ContentType查询集过滤为仅包含具有特定方法的模型?

class myModel(models.Model):
    ...
    def mySpecificMethod:
        ...

我可以在???中放置什么来获取mySpecificMethod存在的所有模型?

ContentType.objects.filter(???)

1 个答案:

答案 0 :(得分:1)

我认为通过循环过滤它更合适。

如果您打算获得QuerySet类型的结果,您只需循环它们,然后获取ID列表,然后使用pk__in参数对其进行过滤。

ContentType.objecst.filter(
    pk__in=[
        ct.pk for ct ContentType.objects.all() 
        if content_type_has_method(ct, 'method_name')
    ]
)

所以,你已经减少了这个问题来写一个方法:

def content_type_has_method(ct, method_name):
    ...

我认为这对你来说更简单,祝你好运!