Django:在循环中查询各种对象

时间:2016-07-14 15:13:38

标签: python django

我在Django中有一个(重复检测)查询,我想申请几个模型:

Cooperation.objects.values('seo__slug').annotate(count=Count('id')).values('seo__slug).filter(count__gt=1)
Article.objects.values('seo__slug').annotate(count=Count('id')).values('seo__slug).filter(count__gt=1)
City.objects.values('seo__slug').annotate(count=Count('id')).values('seo__slug).filter(count__gt=1)

是否有编码概念,以便我可以循环执行此操作。 例如(伪代码,以下不起作用)

information_objects = ['Cooperation', 'Article', 'City']
for obj in information_objects:
  obj.objects.values('seo__slug').annotate(count=Count('id')).values('seo__slug).filter(count__gt=1)

我希望我可以解决我的问题。 如果有人能告诉我Django是否支持这个概念,请告诉我。

1 个答案:

答案 0 :(得分:1)

您可以使列表包含实际的类,然后您的代码将起作用:

information_objects = [Cooperation, Article, City]

如果您绝对需要根据字符串获取它们,可以从globals()获取课程:

information_objects = [globals()[name] for name in ('Cooperation', 'Article', 'City')]

或使用getattr,如果它们在特定模块中:

information_objects = [getattr(the_module, name) for name in ('Cooperation', 'Article', 'City')]