在我的django应用程序中,我的用户可以有多个职位。ie:位置模型有一个指向用户模型的外键。通过使用djangomodelformset_factory
我输出与当前登录用户相关联的所有位置,如下所示:
在视图.py公司名称:
class ABCUpdate(View):
def get(self, request):
user = request.user
PositionFormSet = modelformset_factory(Position)
formset = PositionFormSet(queryset=user.position_set.all().prefetch_related('symbol'))
return render(request,
'some_template.html',
{'formset': formset})
一些_模板.html在
^{pr2}$职位型号:
class Position(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
symbol = models.OneToOneField(Symbol)
# more fields...
some_template.html
上的一个字段是symbol
字段(即:我在上面的片段中使用prefetch_related
的字段)。Symbol
来自使用外键的不同模型。这意味着在html模板上,symbol
字段是一个下拉列表,允许用户选择所需的符号。在
这一切都是正确的,但是问题是数据库正在查询表单集中的每个表单,以检索symbol
的列表。例如,如果用户有10个位置,则每个位置将有一个symbol…的下拉列表,这将导致一个单独的数据库查询来检索所有符号。在
如何对所有可用的symbol
进行一次查询,并将其用于表单集中每个表单中的下拉列表?在
我认为您应该在prefetch_related中指出与其他模型有链接的模型位置的所有字段,在这种情况下,您必须添加字段用户:
PositionFormSet(queryset=user.position_set.all().prefetch_related('symbol', 'user'))
。在另外,它对我有用。在
相关问题 更多 >
编程相关推荐