diff --git a/django/forms/models.py b/django/forms/models.py
index 41380f2..08bc7dc 100644
|
a
|
b
|
class BaseModelFormSet(BaseFormSet):
|
| 395 | 395 | return len(self.get_queryset()) |
| 396 | 396 | return super(BaseModelFormSet, self).initial_form_count() |
| 397 | 397 | |
| | 398 | def _construct_forms(self, *args, **kwargs): |
| | 399 | if self.is_bound: |
| | 400 | self._queryset_dict = dict([(o.pk, o) for o in self.get_queryset()]) |
| | 401 | super(BaseModelFormSet, self)._construct_forms(*args, **kwargs) |
| | 402 | if self.is_bound: |
| | 403 | del self._queryset_dict |
| | 404 | |
| 398 | 405 | def _construct_form(self, i, **kwargs): |
| 399 | | if i < self.initial_form_count(): |
| | 406 | from django.db.models import AutoField, OneToOneField, ForeignKey |
| | 407 | if self.is_bound and i < self.initial_form_count(): |
| | 408 | pk = self.data["%s-%s" % (self.add_prefix(i), self.model._meta.pk.name)] |
| | 409 | pk_field = self.model._meta.pk |
| | 410 | if isinstance(pk, OneToOneField) or isinstance(pk, ForeignKey): |
| | 411 | qs = pk.rel.to._default_manager.get_query_set() |
| | 412 | else: |
| | 413 | qs = self.model._default_manager.get_query_set() |
| | 414 | field = ModelChoiceField(qs, initial=pk, required=False, widget=HiddenInput) |
| | 415 | pk = field.clean(pk).pk |
| | 416 | kwargs['instance'] = self._queryset_dict[pk] |
| | 417 | elif i < self.initial_form_count(): |
| 400 | 418 | kwargs['instance'] = self.get_queryset()[i] |
| 401 | 419 | return super(BaseModelFormSet, self)._construct_form(i, **kwargs) |
| 402 | 420 | |
| … |
… |
class BaseModelFormSet(BaseFormSet):
|
| 499 | 517 | return ((not pk.editable) or (pk.auto_created or isinstance(pk, AutoField)) |
| 500 | 518 | or (pk.rel and pk.rel.parent_link and pk_is_editable(pk.rel.to._meta.pk))) |
| 501 | 519 | if pk_is_editable(pk): |
| 502 | | try: |
| 503 | | pk_value = self.get_queryset()[index].pk |
| 504 | | except IndexError: |
| | 520 | if form.is_bound: |
| | 521 | pk_value = form.instance.pk |
| | 522 | else: |
| 505 | 523 | pk_value = None |
| 506 | 524 | if isinstance(pk, OneToOneField) or isinstance(pk, ForeignKey): |
| 507 | 525 | qs = pk.rel.to._default_manager.get_query_set() |