Commit 3aad955e authored by Karen Tracey's avatar Karen Tracey
Browse files

Fixed #13696 -- ensured inline pk field is rendered

parent 415a3694
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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>
+1 −1
Original line number Diff line number Diff line
@@ -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 %}
+19 −1
Original line number Diff line number Diff line
@@ -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):
+20 −0
Original line number Diff line number Diff line
@@ -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
@@ -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