我CustomerForm
在 Django 中有一个包含Meter
s 列表的表单集。客户拥有计量表,计量表位于客户拥有的设施中。该表格允许用户将仪表分配给客户的设施之一。
该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 - 正确的方法?