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() |