Django,ModelFormField:多次使用评估的查询集

时间:2018-09-07 00:54:00

标签: python django

我有一个带有约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')},
    )

0 个答案:

没有答案