Loading django/contrib/admin/options.py +6 −4 Original line number Diff line number Diff line Loading @@ -278,11 +278,13 @@ class BaseModelAdmin(object): return False # Make sure at least one of the models registered for this site # references this field. # references this field through a FK or a M2M relationship. registered_models = self.admin_site._registry for related_object in opts.get_all_related_objects(): if (related_object.model in registered_models and field == related_object.field.rel.get_related_field()): for related_object in (opts.get_all_related_objects() + opts.get_all_related_many_to_many_objects()): related_model = related_object.model if (any(issubclass(model, related_model) for model in registered_models) and related_object.field.rel.get_related_field() == field): return True return False Loading docs/releases/1.4.15.txt 0 → 100644 +13 −0 Original line number Diff line number Diff line =========================== Django 1.4.15 release notes =========================== *Under development* Django 1.4.15 fixes a regression in the 1.4.14 security release. Bugfixes ======== * Allowed inherited and m2m fields to be referenced in the admin (`#22486 <http://code.djangoproject.com/ticket/23329>`_) docs/releases/index.txt +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ Final releases .. toctree:: :maxdepth: 1 1.4.15 1.4.14 1.4.13 1.4.12 Loading tests/regressiontests/admin_views/admin.py +4 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ from .models import (Article, Chapter, Account, Media, Child, Parent, Picture, Album, Question, Answer, ComplexSortedPerson, PrePopulatedPostLargeSlug, AdminOrderedField, AdminOrderedModelMethod, AdminOrderedAdminMethod, AdminOrderedCallable, Report, Color2, UnorderedObject, MainPrepopulated, RelatedPrepopulated) RelatedPrepopulated, ReferencedByParent, ChildOfReferer, M2MReference) def callable_year(dt_value): Loading Loading @@ -616,6 +616,9 @@ site.register(OtherStory, OtherStoryAdmin) site.register(Report, ReportAdmin) site.register(MainPrepopulated, MainPrepopulatedAdmin) site.register(UnorderedObject, UnorderedObjectAdmin) site.register(ReferencedByParent) site.register(ChildOfReferer) site.register(M2MReference) # We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2. # That way we cover all four cases: Loading tests/regressiontests/admin_views/models.py +18 −0 Original line number Diff line number Diff line Loading @@ -607,3 +607,21 @@ class UnorderedObject(models.Model): """ name = models.CharField(max_length=255) bool = models.BooleanField(default=True) # Models for #23329 class ReferencedByParent(models.Model): pass class ParentWithFK(models.Model): fk = models.ForeignKey(ReferencedByParent) class ChildOfReferer(ParentWithFK): pass class M2MReference(models.Model): ref = models.ManyToManyField('self') Loading
django/contrib/admin/options.py +6 −4 Original line number Diff line number Diff line Loading @@ -278,11 +278,13 @@ class BaseModelAdmin(object): return False # Make sure at least one of the models registered for this site # references this field. # references this field through a FK or a M2M relationship. registered_models = self.admin_site._registry for related_object in opts.get_all_related_objects(): if (related_object.model in registered_models and field == related_object.field.rel.get_related_field()): for related_object in (opts.get_all_related_objects() + opts.get_all_related_many_to_many_objects()): related_model = related_object.model if (any(issubclass(model, related_model) for model in registered_models) and related_object.field.rel.get_related_field() == field): return True return False Loading
docs/releases/1.4.15.txt 0 → 100644 +13 −0 Original line number Diff line number Diff line =========================== Django 1.4.15 release notes =========================== *Under development* Django 1.4.15 fixes a regression in the 1.4.14 security release. Bugfixes ======== * Allowed inherited and m2m fields to be referenced in the admin (`#22486 <http://code.djangoproject.com/ticket/23329>`_)
docs/releases/index.txt +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ Final releases .. toctree:: :maxdepth: 1 1.4.15 1.4.14 1.4.13 1.4.12 Loading
tests/regressiontests/admin_views/admin.py +4 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ from .models import (Article, Chapter, Account, Media, Child, Parent, Picture, Album, Question, Answer, ComplexSortedPerson, PrePopulatedPostLargeSlug, AdminOrderedField, AdminOrderedModelMethod, AdminOrderedAdminMethod, AdminOrderedCallable, Report, Color2, UnorderedObject, MainPrepopulated, RelatedPrepopulated) RelatedPrepopulated, ReferencedByParent, ChildOfReferer, M2MReference) def callable_year(dt_value): Loading Loading @@ -616,6 +616,9 @@ site.register(OtherStory, OtherStoryAdmin) site.register(Report, ReportAdmin) site.register(MainPrepopulated, MainPrepopulatedAdmin) site.register(UnorderedObject, UnorderedObjectAdmin) site.register(ReferencedByParent) site.register(ChildOfReferer) site.register(M2MReference) # We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2. # That way we cover all four cases: Loading
tests/regressiontests/admin_views/models.py +18 −0 Original line number Diff line number Diff line Loading @@ -607,3 +607,21 @@ class UnorderedObject(models.Model): """ name = models.CharField(max_length=255) bool = models.BooleanField(default=True) # Models for #23329 class ReferencedByParent(models.Model): pass class ParentWithFK(models.Model): fk = models.ForeignKey(ReferencedByParent) class ChildOfReferer(ParentWithFK): pass class M2MReference(models.Model): ref = models.ManyToManyField('self')