Loading django/contrib/admin/helpers.py +5 −3 Original line number Diff line number Diff line Loading @@ -266,10 +266,12 @@ class InlineAdminForm(AdminForm): yield InlineFieldset(self.formset, self.form, name, self.readonly_fields, model_admin=self.model_admin, **options) def has_auto_field(self): if self.form._meta.model._meta.has_auto_field: def needs_explicit_pk_field(self): # Auto fields are editable (oddly), so need to check for auto or non-editable pk if self.form._meta.model._meta.has_auto_field or not self.form._meta.model._meta.pk.editable: return True # Also search any parents for an auto field. # Also search any parents for an auto field. (The pk info is propagated to child # models so that does not need to be checked in parents.) for parent in self.form._meta.model._meta.get_parent_list(): if parent._meta.has_auto_field: return True Loading django/contrib/admin/templates/admin/edit_inline/stacked.html +1 −1 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ {% for fieldset in inline_admin_form %} {% include "admin/includes/fieldset.html" %} {% endfor %} {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %} {% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %} {{ inline_admin_form.fk_field.field }} </div>{% endfor %} </div> Loading django/contrib/admin/templates/admin/edit_inline/tabular.html +1 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ {% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %} {% if inline_admin_form.show_url %}<a href="{% url 'admin:view_on_site' inline_admin_form.original_content_type_id inline_admin_form.original.pk %}">{% trans "View on site" %}</a>{% endif %} </p>{% endif %} {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %} {% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %} {{ inline_admin_form.fk_field.field }} {% spaceless %} {% for fieldset in inline_admin_form %} Loading tests/admin_inlines/admin.py +19 −1 Original line number Diff line number Diff line Loading @@ -12,8 +12,26 @@ class BookInline(admin.TabularInline): model = Author.books.through class NonAutoPKBookTabularInline(admin.TabularInline): model = NonAutoPKBook class NonAutoPKBookStackedInline(admin.StackedInline): model = NonAutoPKBook class EditablePKBookTabularInline(admin.TabularInline): model = EditablePKBook class EditablePKBookStackedInline(admin.StackedInline): model = EditablePKBook class AuthorAdmin(admin.ModelAdmin): inlines = [BookInline] inlines = [BookInline, NonAutoPKBookTabularInline, NonAutoPKBookStackedInline, EditablePKBookTabularInline, EditablePKBookStackedInline] class InnerInline(admin.StackedInline): Loading tests/admin_inlines/models.py +20 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ Testing of admin inline formsets. """ from __future__ import unicode_literals import random from django.db import models from django.contrib.contenttypes.models import ContentType Loading Loading @@ -48,6 +49,25 @@ class Author(models.Model): books = models.ManyToManyField(Book) class NonAutoPKBook(models.Model): rand_pk = models.IntegerField(primary_key=True, editable=False) author = models.ForeignKey(Author) title = models.CharField(max_length=50) def save(self, *args, **kwargs): while not self.rand_pk: test_pk = random.randint(1, 99999) if not NonAutoPKBook.objects.filter(rand_pk=test_pk).exists(): self.rand_pk = test_pk super(NonAutoPKBook, self).save(*args, **kwargs) class EditablePKBook(models.Model): manual_pk = models.IntegerField(primary_key=True) author = models.ForeignKey(Author) title = models.CharField(max_length=50) class Holder(models.Model): dummy = models.IntegerField() Loading Loading
django/contrib/admin/helpers.py +5 −3 Original line number Diff line number Diff line Loading @@ -266,10 +266,12 @@ class InlineAdminForm(AdminForm): yield InlineFieldset(self.formset, self.form, name, self.readonly_fields, model_admin=self.model_admin, **options) def has_auto_field(self): if self.form._meta.model._meta.has_auto_field: def needs_explicit_pk_field(self): # Auto fields are editable (oddly), so need to check for auto or non-editable pk if self.form._meta.model._meta.has_auto_field or not self.form._meta.model._meta.pk.editable: return True # Also search any parents for an auto field. # Also search any parents for an auto field. (The pk info is propagated to child # models so that does not need to be checked in parents.) for parent in self.form._meta.model._meta.get_parent_list(): if parent._meta.has_auto_field: return True Loading
django/contrib/admin/templates/admin/edit_inline/stacked.html +1 −1 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ {% for fieldset in inline_admin_form %} {% include "admin/includes/fieldset.html" %} {% endfor %} {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %} {% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %} {{ inline_admin_form.fk_field.field }} </div>{% endfor %} </div> Loading
django/contrib/admin/templates/admin/edit_inline/tabular.html +1 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ {% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %} {% if inline_admin_form.show_url %}<a href="{% url 'admin:view_on_site' inline_admin_form.original_content_type_id inline_admin_form.original.pk %}">{% trans "View on site" %}</a>{% endif %} </p>{% endif %} {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %} {% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %} {{ inline_admin_form.fk_field.field }} {% spaceless %} {% for fieldset in inline_admin_form %} Loading
tests/admin_inlines/admin.py +19 −1 Original line number Diff line number Diff line Loading @@ -12,8 +12,26 @@ class BookInline(admin.TabularInline): model = Author.books.through class NonAutoPKBookTabularInline(admin.TabularInline): model = NonAutoPKBook class NonAutoPKBookStackedInline(admin.StackedInline): model = NonAutoPKBook class EditablePKBookTabularInline(admin.TabularInline): model = EditablePKBook class EditablePKBookStackedInline(admin.StackedInline): model = EditablePKBook class AuthorAdmin(admin.ModelAdmin): inlines = [BookInline] inlines = [BookInline, NonAutoPKBookTabularInline, NonAutoPKBookStackedInline, EditablePKBookTabularInline, EditablePKBookStackedInline] class InnerInline(admin.StackedInline): Loading
tests/admin_inlines/models.py +20 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ Testing of admin inline formsets. """ from __future__ import unicode_literals import random from django.db import models from django.contrib.contenttypes.models import ContentType Loading Loading @@ -48,6 +49,25 @@ class Author(models.Model): books = models.ManyToManyField(Book) class NonAutoPKBook(models.Model): rand_pk = models.IntegerField(primary_key=True, editable=False) author = models.ForeignKey(Author) title = models.CharField(max_length=50) def save(self, *args, **kwargs): while not self.rand_pk: test_pk = random.randint(1, 99999) if not NonAutoPKBook.objects.filter(rand_pk=test_pk).exists(): self.rand_pk = test_pk super(NonAutoPKBook, self).save(*args, **kwargs) class EditablePKBook(models.Model): manual_pk = models.IntegerField(primary_key=True) author = models.ForeignKey(Author) title = models.CharField(max_length=50) class Holder(models.Model): dummy = models.IntegerField() Loading