1

CustomerForm在 Django 中有一个包含Meters 列表的表单集。客户拥有计量表,计量表位于客户拥有的设施中。该表格允许用户将仪表分配给客户的设施之一。

Meter模型有一个字段:

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

表单集通过以下方式生成:

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 个项目。

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

更新:这归结为一般如何处理大型更新视图。对于 DetailViews,我使用了一些 AJAXy 魔法来仅获取用户可见的记录的数据。这对 UpdateViews 不起作用,因为用户可能会更新记录 1 和记录 300——它们可能不会同时显示。

更新:这是仪表表单集表的一部分的示例:

在此处输入图像描述

更新:另一个用户解决问题的方法:用于一次编辑多个相关记录的 Django Inline formset - 正确的方法?

4

0 回答 0