Django ModelChoiceField和具有> 100 formset形式的性能

时间:2013-05-16 21:11:41

标签: django django-forms

我在Django中有一个CustomerForm,其中包含一个带有Meter列表的表单集。客户有米和米位于客户拥有的设施。该表单允许用户将仪表分配给客户的其中一个设施。

Meter模型有一个字段:

facility = models.ForeignKey(
    Facility, 
    blank=True, 
    null=True, 
    default=None, 
    related_name='meters',
)

formset通过以下方式生成:

meters_formset_class = inlineformset_factory(
    Customer,
    Meter,
    extra=0,
    form=MeterInlineForm
)

并使用以下`MeterInlineForm'定义:

class MeterInlineForm(forms.ModelForm):
    class Meta:
        fields = (
            'facility',
        )
        model = Meter

    def __init__(self, *args, **kwargs):
        super(MeterInlineForm, self).__init__(*args, **kwargs)
        meter = kwargs.get('instance', None)

        if meter != None:
            if meter.customer != None:
                self.fields['facility'].queryset = \
                    meter.customer.facilities.order_by('name')

这很有效 - 直到我有一个数百米的客户。然后,如Django文档中所述,A ModelChoiceField

  

允许选择适合的单个模型对象   代表外键。请注意默认小部件   当条目数量时,ModelChoiceField变得不切实际   增加。你应该避免使用它超过100个项目。

问题 :我该如何解决这个性能问题?

更新 :这归结为如何处理大型UpdateView。对于DetailViews,我使用一些AJAXy魔法来获取用户可见的记录的数据。这不适用于UpdateViews,因为用户可能会更新记录1和记录300 - 这可能不会同时显示。

更新 :以下是米表格表的一部分示例:

enter image description here

更新 :另一位用户解决问题的方法:Django Inline formset for editing multiple related records at once - the right way to go?

0 个答案:

没有答案