在我的 Django 应用程序中,我的用户可以拥有多个职位。即:Position 模型有 User 模型的外键。通过使用 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
<form action="#" method="post">
{% csrf_token %}
{{ formset.management_form }}
{% for position in formset %}
<div class="row">
{{ position }}
</div>
{% endfor %}
<button type="submit">
Update
</button>
</form>
职位模型:
class Position(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
symbol = models.OneToOneField(Symbol)
# more fields...
上的字段之一some_template.html
is the symbol
字段(即:我正在使用的字段prefetch_related
在上面的片段中)。Symbol
来自使用外键的不同模型。这意味着在 html 模板上,symbol
字段是一个下拉列表,允许用户选择所需的符号。
这一切都工作正常,但问题是正在查询数据库以查找表单集中的每个表单以检索列表symbol
的。例如,如果用户有 10 个仓位,则每个仓位都会有一个交易品种下拉列表,...这会导致单独的数据库查询来检索所有交易品种。
我该如何对所有可用的数据进行一次查询symbol
并将其用于表单集中每个表单的下拉列表?
我认为您应该指出 prefetch_lated 模型位置的所有字段,这些字段具有指向另一个模型的链接,在您的情况下,您必须添加字段用户:PositionFormSet(queryset=user.position_set.all().prefetch_related('symbol', 'user'))
.
附:它对我有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)