我有一个基本模型(模型。模型),以及ExtendedModelA(BaseModel)和ExtendedModelB(BaseModel)。ExtendedModelA和ExtendedModelB都有其他模型的外键字段。它们的unicode方法从这个外键相关模型返回一个字段。在
我有一个下拉菜单,我想用BaseModel对象填充它(它自然包括ExtendedModelA和ExtendedModelB对象)。为此,我需要一个查询集,它将获取所有扩展对象(类型a和B)及其相关对象。在
我有一个合并的查询集:
queryset = BaseModel.objects.filter(type=1).select_related('extendedmodela') | BaseModel.objects.filter(type=2).select_related('extendedmodelb')
问题是基本模型的unicode表示在下拉列表中显示。如果我将unicode方法添加到具有条件的BaseModel类:
^{pr2}$这将导致查询每个对象的数据库。在
有什么办法让我自己摆脱困境吗?在
本质上,我需要制定一个查询集,它将有效地获取所有的BaseModel对象,当它们在下拉列表中显示它们各自扩展类的unicode方法(从外键字段对象打印字段)时,不要敲击数据库。我有几千个对象,所以数据库会受到影响。在
干杯
迪安
为什么不把一个混杂的袋子交给下拉列表呢。这不再是
QuerySet
,但下拉列表不会介意:无论选择哪个实例,它的
id
将与其BaseModel
实例相同。在您使用的是
select_related
,这很好。我认为您可以通过使用Q
来优化查询,这实际上允许您筛选类型1或类型2(在本例中)。在编辑
您可以使用双下划线表示法来访问相关模型上的更深的字段。例如
^{pr2}$相关问题 更多 >
编程相关推荐