Django

Code

Changeset 8179

Show
Ignore:
Timestamp:
08/01/08 15:35:40 (4 months ago)
Author:
brosner
Message:

Ensure that custom primary keys are always shown on a formset. Refs #7938. Thanks magneto for discovering this problem.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/forms/models.py

    r8169 r8179  
    379379    def add_fields(self, form, index): 
    380380        """Add a hidden field for the object's primary key.""" 
    381         self._pk_field_name = self.model._meta.pk.attname 
    382         form.fields[self._pk_field_name] = IntegerField(required=False, widget=HiddenInput) 
     381        if self.model._meta.has_auto_field: 
     382            self._pk_field_name = self.model._meta.pk.attname 
     383            form.fields[self._pk_field_name] = IntegerField(required=False, widget=HiddenInput) 
    383384        super(BaseModelFormSet, self).add_fields(form, index) 
    384385 
  • django/trunk/tests/modeltests/model_formsets/models.py

    r8178 r8179  
    2929    def __unicode__(self): 
    3030        return self.name 
     31 
     32class CustomPrimaryKey(models.Model): 
     33    my_pk = models.CharField(max_length=10, primary_key=True) 
     34    some_field = models.CharField(max_length=100) 
    3135 
    3236 
     
    331335<p><label for="id_test-1-title">Title:</label> <input id="id_test-1-title" type="text" name="test-1-title" maxlength="100" /><input type="hidden" name="test-1-id" id="id_test-1-id" /></p> 
    332336 
     337# Test a custom primary key ################################################### 
     338 
     339We need to ensure that it is displayed 
     340 
     341>>> CustomPrimaryKeyFormSet = modelformset_factory(CustomPrimaryKey) 
     342>>> formset = CustomPrimaryKeyFormSet() 
     343>>> for form in formset.forms: 
     344...     print form.as_p() 
     345<p><label for="id_form-0-my_pk">My pk:</label> <input id="id_form-0-my_pk" type="text" name="form-0-my_pk" maxlength="10" /></p> 
     346<p><label for="id_form-0-some_field">Some field:</label> <input id="id_form-0-some_field" type="text" name="form-0-some_field" maxlength="100" /></p> 
    333347 
    334348"""}