Loading django/contrib/admin/options.py +11 −2 Original line number Diff line number Diff line Loading @@ -270,6 +270,10 @@ class BaseModelAdmin(object): return clean_lookup in self.list_filter or clean_lookup == self.date_hierarchy def to_field_allowed(self, request, to_field): """ Returns True if the model associated with this admin should be allowed to be referenced by the specified field. """ opts = self.model._meta try: Loading @@ -279,8 +283,13 @@ class BaseModelAdmin(object): # Make sure at least one of the models registered for this site # 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() + registered_models = set() for model, admin in self.admin_site._registry.items(): registered_models.add(model) for inline in admin.inlines: registered_models.add(inline.model) for related_object in (opts.get_all_related_objects(include_hidden=True) + 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 Loading docs/releases/1.4.16.txt 0 → 100644 +13 −0 Original line number Diff line number Diff line =========================== Django 1.4.16 release notes =========================== *Under development* Django 1.4.16 fixes a regression in the 1.4.14 security release. Bugfixes ======== * Allowed inline and hidden references to admin fields (`#23431 <http://code.djangoproject.com/ticket/23431>`_). 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.16 1.4.15 1.4.14 1.4.13 Loading tests/regressiontests/admin_views/admin.py +12 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ from .models import (Article, Chapter, Account, Media, Child, Parent, Picture, Album, Question, Answer, ComplexSortedPerson, PrePopulatedPostLargeSlug, AdminOrderedField, AdminOrderedModelMethod, AdminOrderedAdminMethod, AdminOrderedCallable, Report, Color2, UnorderedObject, MainPrepopulated, RelatedPrepopulated, ReferencedByParent, ChildOfReferer, M2MReference) RelatedPrepopulated, ReferencedByParent, ChildOfReferer, M2MReference, ReferencedByInline, InlineReference, InlineReferer) def callable_year(dt_value): Loading Loading @@ -570,6 +571,14 @@ class UnorderedObjectAdmin(admin.ModelAdmin): class InlineReferenceInline(admin.TabularInline): model = InlineReference class InlineRefererAdmin(admin.ModelAdmin): inlines = [InlineReferenceInline] site = admin.AdminSite(name="admin") site.register(Article, ArticleAdmin) site.register(CustomArticle, CustomArticleAdmin) Loading Loading @@ -619,6 +628,8 @@ site.register(UnorderedObject, UnorderedObjectAdmin) site.register(ReferencedByParent) site.register(ChildOfReferer) site.register(M2MReference) site.register(ReferencedByInline) site.register(InlineReferer, InlineRefererAdmin) # 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 +12 −0 Original line number Diff line number Diff line Loading @@ -625,3 +625,15 @@ class ChildOfReferer(ParentWithFK): class M2MReference(models.Model): ref = models.ManyToManyField('self') # Models for #23431 class ReferencedByInline(models.Model): pass class InlineReference(models.Model): fk = models.ForeignKey(ReferencedByInline, related_name='hidden+') class InlineReferer(models.Model): refs = models.ManyToManyField(InlineReference) Loading
django/contrib/admin/options.py +11 −2 Original line number Diff line number Diff line Loading @@ -270,6 +270,10 @@ class BaseModelAdmin(object): return clean_lookup in self.list_filter or clean_lookup == self.date_hierarchy def to_field_allowed(self, request, to_field): """ Returns True if the model associated with this admin should be allowed to be referenced by the specified field. """ opts = self.model._meta try: Loading @@ -279,8 +283,13 @@ class BaseModelAdmin(object): # Make sure at least one of the models registered for this site # 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() + registered_models = set() for model, admin in self.admin_site._registry.items(): registered_models.add(model) for inline in admin.inlines: registered_models.add(inline.model) for related_object in (opts.get_all_related_objects(include_hidden=True) + 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 Loading
docs/releases/1.4.16.txt 0 → 100644 +13 −0 Original line number Diff line number Diff line =========================== Django 1.4.16 release notes =========================== *Under development* Django 1.4.16 fixes a regression in the 1.4.14 security release. Bugfixes ======== * Allowed inline and hidden references to admin fields (`#23431 <http://code.djangoproject.com/ticket/23431>`_).
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.16 1.4.15 1.4.14 1.4.13 Loading
tests/regressiontests/admin_views/admin.py +12 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ from .models import (Article, Chapter, Account, Media, Child, Parent, Picture, Album, Question, Answer, ComplexSortedPerson, PrePopulatedPostLargeSlug, AdminOrderedField, AdminOrderedModelMethod, AdminOrderedAdminMethod, AdminOrderedCallable, Report, Color2, UnorderedObject, MainPrepopulated, RelatedPrepopulated, ReferencedByParent, ChildOfReferer, M2MReference) RelatedPrepopulated, ReferencedByParent, ChildOfReferer, M2MReference, ReferencedByInline, InlineReference, InlineReferer) def callable_year(dt_value): Loading Loading @@ -570,6 +571,14 @@ class UnorderedObjectAdmin(admin.ModelAdmin): class InlineReferenceInline(admin.TabularInline): model = InlineReference class InlineRefererAdmin(admin.ModelAdmin): inlines = [InlineReferenceInline] site = admin.AdminSite(name="admin") site.register(Article, ArticleAdmin) site.register(CustomArticle, CustomArticleAdmin) Loading Loading @@ -619,6 +628,8 @@ site.register(UnorderedObject, UnorderedObjectAdmin) site.register(ReferencedByParent) site.register(ChildOfReferer) site.register(M2MReference) site.register(ReferencedByInline) site.register(InlineReferer, InlineRefererAdmin) # 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 +12 −0 Original line number Diff line number Diff line Loading @@ -625,3 +625,15 @@ class ChildOfReferer(ParentWithFK): class M2MReference(models.Model): ref = models.ManyToManyField('self') # Models for #23431 class ReferencedByInline(models.Model): pass class InlineReference(models.Model): fk = models.ForeignKey(ReferencedByInline, related_name='hidden+') class InlineReferer(models.Model): refs = models.ManyToManyField(InlineReference)