【发布时间】:2015-11-12 00:17:07
【问题描述】:
我有一个包含 ModelChoiceField 的同一类的表格。并且一行中的每个表单都对该字段具有相同的查询集。问题是每次呈现表单时,都是一个新的查询,查询的数量增加得难以忍受。
我想出的唯一解决方案是使用 js 随时随地构建表单,而不是让 django 自己渲染。有没有办法缓存这些查询集或一次预加载它?
views.py:
shift_table=[]
for project in calendar_projects:
shift_table.append([])
project_branches = project.branches.all()
for i, week in enumerate(month):
for day in week:
shift_table[-1].append(
CreateShiftCalendarForm(initial={'date': day}, branch_choices=project_branches))
forms.py:
CreateShiftCalendarForm(EditShiftCalendarForm):
class Meta(ShiftForm.Meta):
fields = ('project_branch', 'date') + ShiftForm.Meta.fields
widgets = {'date': forms.HiddenInput(), 'length': forms.NumberInput(attrs={'step': 'any'}), 'project_branch': forms.Select()}
def __init__(self, *args, **kwargs):
branch_choices = kwargs.pop('branch_choices', ProjectBranch.objects.none())
super(CreateShiftCalendarForm, self).__init__(*args, **kwargs)
self.fields['project_branch'].queryset = branch_choices
self.fields['project_branch'].empty_label = None
【问题讨论】:
-
您能提供您的表单代码吗?
-
你去@GwynBleidD
标签: django django-forms django-queryset overhead