Loading django/contrib/admin/helpers.py +1 −1 Original line number Diff line number Diff line Loading @@ -203,7 +203,7 @@ class AdminReadonlyField(object): else: result_repr = linebreaksbr(result_repr) else: if isinstance(f.rel, ManyToManyRel) and value is not None: if isinstance(getattr(f, 'rel', None), ManyToManyRel) and value is not None: result_repr = ", ".join(map(six.text_type, value.all())) else: result_repr = display_for_field(value, f) Loading django/contrib/admin/utils.py +1 −1 Original line number Diff line number Diff line Loading @@ -376,7 +376,7 @@ def display_for_field(value, field): from django.contrib.admin.templatetags.admin_list import _boolean_icon from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE if field.flatchoices: if getattr(field, 'flatchoices', None): return dict(field.flatchoices).get(value, EMPTY_CHANGELIST_VALUE) # NullBooleanField needs special-case null-handling, so it comes # before the general null test. Loading docs/releases/1.8.9.txt +3 −0 Original line number Diff line number Diff line Loading @@ -26,3 +26,6 @@ Bugfixes * Fixed a crash when using an ``__in`` lookup inside a ``Case`` expression (:ticket:`26071`). * Fixed a crash when using a reverse ``OneToOneField`` in ``ModelAdmin.readonly_fields`` (:ticket:`26060`). tests/admin_views/admin.py +14 −9 Original line number Diff line number Diff line Loading @@ -34,15 +34,15 @@ from .models import ( InlineReference, InlineReferer, Inquisition, Language, Link, MainPrepopulated, ModelWithStringPrimaryKey, NotReferenced, OldSubscriber, OtherStory, Paper, Parent, ParentWithDependentChildren, Person, Persona, Picture, Pizza, Plot, PlotDetails, PluggableSearchPerson, Podcast, Post, PrePopulatedPost, PrePopulatedPostLargeSlug, PrePopulatedSubPost, Promo, Question, Recipe, Recommendation, Recommender, ReferencedByGenRel, ReferencedByInline, ReferencedByParent, RelatedPrepopulated, Report, Reservation, Restaurant, RowLevelChangePermissionModel, Section, ShortMessage, Simple, Sketch, State, Story, StumpJoke, Subscriber, SuperVillain, Telegram, Thing, Topping, UnchangeableObject, UndeletableObject, UnorderedObject, UserMessenger, Villain, Vodcast, Whatsit, Widget, Worker, WorkHour, Picture, Pizza, Plot, PlotDetails, PlotProxy, PluggableSearchPerson, Podcast, Post, PrePopulatedPost, PrePopulatedPostLargeSlug, PrePopulatedSubPost, Promo, Question, Recipe, Recommendation, Recommender, ReferencedByGenRel, ReferencedByInline, ReferencedByParent, RelatedPrepopulated, Report, Reservation, Restaurant, RowLevelChangePermissionModel, Section, ShortMessage, Simple, Sketch, State, Story, StumpJoke, Subscriber, SuperVillain, Telegram, Thing, Topping, UnchangeableObject, UndeletableObject, UnorderedObject, UserMessenger, Villain, Vodcast, Whatsit, Widget, Worker, WorkHour, ) Loading Loading @@ -853,6 +853,10 @@ class InlineRefererAdmin(admin.ModelAdmin): inlines = [InlineReferenceInline] class PlotReadonlyAdmin(admin.ModelAdmin): readonly_fields = ('plotdetails',) class GetFormsetsArgumentCheckingAdmin(admin.ModelAdmin): fields = ['name'] Loading Loading @@ -907,6 +911,7 @@ site.register(Villain) site.register(SuperVillain) site.register(Plot) site.register(PlotDetails) site.register(PlotProxy, PlotReadonlyAdmin) site.register(CyclicOne) site.register(CyclicTwo) site.register(WorkHour, WorkHourAdmin) Loading tests/admin_views/models.py +6 −1 Original line number Diff line number Diff line Loading @@ -501,12 +501,17 @@ class Plot(models.Model): @python_2_unicode_compatible class PlotDetails(models.Model): details = models.CharField(max_length=100) plot = models.OneToOneField(Plot) plot = models.OneToOneField(Plot, null=True, blank=True) def __str__(self): return self.details class PlotProxy(Plot): class Meta: proxy = True @python_2_unicode_compatible class SecretHideout(models.Model): """ Secret! Not registered with the admin! """ Loading Loading
django/contrib/admin/helpers.py +1 −1 Original line number Diff line number Diff line Loading @@ -203,7 +203,7 @@ class AdminReadonlyField(object): else: result_repr = linebreaksbr(result_repr) else: if isinstance(f.rel, ManyToManyRel) and value is not None: if isinstance(getattr(f, 'rel', None), ManyToManyRel) and value is not None: result_repr = ", ".join(map(six.text_type, value.all())) else: result_repr = display_for_field(value, f) Loading
django/contrib/admin/utils.py +1 −1 Original line number Diff line number Diff line Loading @@ -376,7 +376,7 @@ def display_for_field(value, field): from django.contrib.admin.templatetags.admin_list import _boolean_icon from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE if field.flatchoices: if getattr(field, 'flatchoices', None): return dict(field.flatchoices).get(value, EMPTY_CHANGELIST_VALUE) # NullBooleanField needs special-case null-handling, so it comes # before the general null test. Loading
docs/releases/1.8.9.txt +3 −0 Original line number Diff line number Diff line Loading @@ -26,3 +26,6 @@ Bugfixes * Fixed a crash when using an ``__in`` lookup inside a ``Case`` expression (:ticket:`26071`). * Fixed a crash when using a reverse ``OneToOneField`` in ``ModelAdmin.readonly_fields`` (:ticket:`26060`).
tests/admin_views/admin.py +14 −9 Original line number Diff line number Diff line Loading @@ -34,15 +34,15 @@ from .models import ( InlineReference, InlineReferer, Inquisition, Language, Link, MainPrepopulated, ModelWithStringPrimaryKey, NotReferenced, OldSubscriber, OtherStory, Paper, Parent, ParentWithDependentChildren, Person, Persona, Picture, Pizza, Plot, PlotDetails, PluggableSearchPerson, Podcast, Post, PrePopulatedPost, PrePopulatedPostLargeSlug, PrePopulatedSubPost, Promo, Question, Recipe, Recommendation, Recommender, ReferencedByGenRel, ReferencedByInline, ReferencedByParent, RelatedPrepopulated, Report, Reservation, Restaurant, RowLevelChangePermissionModel, Section, ShortMessage, Simple, Sketch, State, Story, StumpJoke, Subscriber, SuperVillain, Telegram, Thing, Topping, UnchangeableObject, UndeletableObject, UnorderedObject, UserMessenger, Villain, Vodcast, Whatsit, Widget, Worker, WorkHour, Picture, Pizza, Plot, PlotDetails, PlotProxy, PluggableSearchPerson, Podcast, Post, PrePopulatedPost, PrePopulatedPostLargeSlug, PrePopulatedSubPost, Promo, Question, Recipe, Recommendation, Recommender, ReferencedByGenRel, ReferencedByInline, ReferencedByParent, RelatedPrepopulated, Report, Reservation, Restaurant, RowLevelChangePermissionModel, Section, ShortMessage, Simple, Sketch, State, Story, StumpJoke, Subscriber, SuperVillain, Telegram, Thing, Topping, UnchangeableObject, UndeletableObject, UnorderedObject, UserMessenger, Villain, Vodcast, Whatsit, Widget, Worker, WorkHour, ) Loading Loading @@ -853,6 +853,10 @@ class InlineRefererAdmin(admin.ModelAdmin): inlines = [InlineReferenceInline] class PlotReadonlyAdmin(admin.ModelAdmin): readonly_fields = ('plotdetails',) class GetFormsetsArgumentCheckingAdmin(admin.ModelAdmin): fields = ['name'] Loading Loading @@ -907,6 +911,7 @@ site.register(Villain) site.register(SuperVillain) site.register(Plot) site.register(PlotDetails) site.register(PlotProxy, PlotReadonlyAdmin) site.register(CyclicOne) site.register(CyclicTwo) site.register(WorkHour, WorkHourAdmin) Loading
tests/admin_views/models.py +6 −1 Original line number Diff line number Diff line Loading @@ -501,12 +501,17 @@ class Plot(models.Model): @python_2_unicode_compatible class PlotDetails(models.Model): details = models.CharField(max_length=100) plot = models.OneToOneField(Plot) plot = models.OneToOneField(Plot, null=True, blank=True) def __str__(self): return self.details class PlotProxy(Plot): class Meta: proxy = True @python_2_unicode_compatible class SecretHideout(models.Model): """ Secret! Not registered with the admin! """ Loading