summaryrefslogtreecommitdiff
path: root/tests/admin_views/admin.py
diff options
context:
space:
mode:
authorJay Leadbetter <jay.leadbetter@gmail.com>2013-11-14 19:26:19 -0700
committerTim Graham <timograham@gmail.com>2013-11-25 20:01:16 -0500
commitc74504c2dd21974571ab72805fbfc8d4d76ce151 (patch)
treedf8996aa78b584d2d467f06849d71a5b0205c685 /tests/admin_views/admin.py
parent1c7a83ee8e3da431d9d21dae42da8f1f89973f7c (diff)
Fixed #20522 - Allowed use of partially validated object in ModelAdmin.add_view formset validation.
Updated ModelAdmin to use form.instance when passing parent model to child inlines for add_view. There is effectively no change in the change_view since the previously passed 'obj' is the same as form.instance. Thanks to meshy for report, and EvilDMP and timo for review.
Diffstat (limited to 'tests/admin_views/admin.py')
-rw-r--r--tests/admin_views/admin.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py
index 039383a7dc..5a895958b0 100644
--- a/tests/admin_views/admin.py
+++ b/tests/admin_views/admin.py
@@ -7,6 +7,7 @@ import os
from django import forms
from django.contrib import admin
from django.contrib.admin.views.main import ChangeList
+from django.core.exceptions import ValidationError
from django.core.files.storage import FileSystemStorage
from django.core.mail import EmailMessage
from django.core.servers.basehttp import FileWrapper
@@ -31,7 +32,8 @@ from .models import (Article, Chapter, Account, Media, Child, Parent, Picture,
AdminOrderedCallable, Report, Color2, UnorderedObject, MainPrepopulated,
RelatedPrepopulated, UndeletableObject, UnchangeableObject, UserMessenger, Simple, Choice,
ShortMessage, Telegram, FilteredManager, EmptyModelHidden,
- EmptyModelVisible, EmptyModelMixin, State, City, Restaurant, Worker)
+ EmptyModelVisible, EmptyModelMixin, State, City, Restaurant, Worker,
+ ParentWithDependentChildren, DependentChild)
def callable_year(dt_value):
@@ -716,6 +718,28 @@ class ChoiceList(admin.ModelAdmin):
fields = ['choice']
+class DependentChildAdminForm(forms.ModelForm):
+ """
+ Issue #20522
+ Form to test child dependency on parent object's validation
+ """
+ def clean(self):
+ parent = self.cleaned_data.get('parent')
+ if parent.family_name and parent.family_name != self.cleaned_data.get('family_name'):
+ raise ValidationError("Children must share a family name with their parents " +
+ "in this contrived test case")
+ return super(DependentChildAdminForm, self).clean()
+
+
+class DependentChildInline(admin.TabularInline):
+ model = DependentChild
+ form = DependentChildAdminForm
+
+
+class ParentWithDependentChildrenAdmin(admin.ModelAdmin):
+ inlines = [DependentChildInline]
+
+
# Tests for ticket 11277 ----------------------------------
class FormWithoutHiddenField(forms.ModelForm):
@@ -872,6 +896,7 @@ site.register(Color2, CustomTemplateFilterColorAdmin)
site.register(Simple, AttributeErrorRaisingAdmin)
site.register(UserMessenger, MessageTestingAdmin)
site.register(Choice, ChoiceList)
+site.register(ParentWithDependentChildren, ParentWithDependentChildrenAdmin)
site.register(EmptyModelHidden, EmptyModelHiddenAdmin)
site.register(EmptyModelVisible, EmptyModelVisibleAdmin)
site.register(EmptyModelMixin, EmptyModelMixinAdmin)