Fixed #23934 -- Fixed regression in admin views obj parameter.

This commit is contained in:
Kamil Braun 2014-11-27 19:34:14 +01:00 committed by Tim Graham
parent 1da1fe8e16
commit 0623f4dea4
5 changed files with 92 additions and 7 deletions

View file

@ -18,7 +18,8 @@ from django.contrib.admin import BooleanFieldListFilter
from django.utils.safestring import mark_safe
from django.utils.six import StringIO
from .models import (Article, Chapter, Child, Parent, Picture, Widget,
from .models import (
Article, Chapter, Child, Parent, Picture, Widget,
DooHickey, Grommet, Whatsit, FancyDoodad, Category, Link,
PrePopulatedPost, PrePopulatedSubPost, CustomArticle, Section,
ModelWithStringPrimaryKey, Color, Thing, Actor, Inquisition, Sketch,
@ -37,7 +38,9 @@ from .models import (Article, Chapter, Child, Parent, Picture, Widget,
State, City, Restaurant, Worker, ParentWithDependentChildren,
DependentChild, StumpJoke, FieldOverridePost, FunkyTag,
ReferencedByParent, ChildOfReferer, ReferencedByInline,
InlineReference, InlineReferer, Recipe, Ingredient, NotReferenced)
InlineReference, InlineReferer, Recipe, Ingredient, NotReferenced,
ExplicitlyProvidedPK, ImplicitlyGeneratedPK,
)
def callable_year(dt_value):
@ -842,6 +845,25 @@ class InlineRefererAdmin(admin.ModelAdmin):
inlines = [InlineReferenceInline]
class GetFormsetsArgumentCheckingAdmin(admin.ModelAdmin):
fields = ['name']
def add_view(self, request, *args, **kwargs):
request.is_add_view = True
return super(GetFormsetsArgumentCheckingAdmin, self).add_view(request, *args, **kwargs)
def change_view(self, request, *args, **kwargs):
request.is_add_view = False
return super(GetFormsetsArgumentCheckingAdmin, self).change_view(request, *args, **kwargs)
def get_formsets_with_inlines(self, request, obj=None):
if request.is_add_view and obj is not None:
raise Exception("'obj' passed to get_formsets_with_inlines wasn't None during add_view")
if not request.is_add_view and obj is None:
raise Exception("'obj' passed to get_formsets_with_inlines was None during change_view")
return super(GetFormsetsArgumentCheckingAdmin, self).get_formsets_with_inlines(request, obj)
site = admin.AdminSite(name="admin")
site.site_url = '/my-site-url/'
site.register(Article, ArticleAdmin)
@ -942,6 +964,8 @@ site.register(StumpJoke)
site.register(Recipe)
site.register(Ingredient)
site.register(NotReferenced)
site.register(ExplicitlyProvidedPK, GetFormsetsArgumentCheckingAdmin)
site.register(ImplicitlyGeneratedPK, GetFormsetsArgumentCheckingAdmin)
# Register core models we need in our tests
from django.contrib.auth.models import User, Group