我在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 - 这可能不会同时显示。
更新 :以下是米表格表的一部分示例:
更新 :另一位用户解决问题的方法:Django Inline formset for editing multiple related records at once - the right way to go?