我有一个带有约5个表格的ModelFormSet;每个表单副本都有一个ModelChoiceField
,其中所有字段都是一个模型距离,大约1000个项目。
我只想对查询集Distance.objects.all()
进行一次评估,而不要对5个这样的查询进行评估,并以每种形式使用其结果。我该怎么办?
我试图将参数form_kwargs={'distances': models.Distance.objects.all()}
提供给ModelFormSet;但似乎仍然为每个表单副本评估此查询集。我可以要求Django只做一次吗?
这是我的表单代码:
class RaceForm(forms.ModelForm):
distance = forms.ModelChoiceField(
queryset=models.Distance.objects.none(),
required=True)
distance_real = forms.ModelChoiceField(
queryset=models.Distance.objects.none(),
required=False)
def __init__(self, *args, **kwargs):
distances = kwargs.pop('distances')
super(RaceForm, self).__init__(*args, **kwargs)
self.fields['distance'].queryset = distances
self.fields['distance_real'].queryset = distances
这是我创建表单集的方法:
def getRaceFormSet(user, event, data=None):
RaceFormSet = modelformset_factory(models.Race, form=forms.RaceForm, can_delete=True, extra=N_EXTRA_RACES)
return RaceFormSet(
data=data,
queryset=event.race_set.select_related('distance').order_by(
'distance__distance_type', '-distance__length', 'precise_name'),
initial=[{'event': event, 'created_by': user}] * N_EXTRA_RACES,
form_kwargs={'distances': models.Distance.objects.all().order_by('-popularity_value', 'distance_type', 'length')},
)