Kaydet (Commit) 2b48fcc6 authored tarafından Honza Kral's avatar Honza Kral

Fixed #18491 -- deleting a proxy doesn't show warning about cascade deletes

üst 83ecb7b1
......@@ -154,6 +154,9 @@ class NestedObjects(Collector):
if source_attr:
self.add_edge(getattr(obj, source_attr), obj)
else:
if obj._meta.proxy:
# Take concrete model's instance to avoid mismatch in edges
obj = obj._meta.concrete_model(pk=obj.pk)
self.add_edge(None, obj)
try:
return super(NestedObjects, self).collect(objs, source_attr=source_attr, **kwargs)
......
from distutils.core import setup
from setuptools import setup
from distutils.command.install_data import install_data
from distutils.command.install import INSTALL_SCHEMES
from distutils.sysconfig import get_python_lib
......
[
{
"pk": 100,
"model": "proxy_models.BaseUser",
"fields": {
"name": "Django Pony"
}
},
{
"pk": 100,
"model": "proxy_models.TrackerUser",
"fields": {
"status": "emperor"
}
},
{
"pk": 100,
"model": "proxy_models.Issue",
"fields": {
"summary": "Pony's Issue",
"assignee": 100
}
}
]
\ No newline at end of file
......@@ -2,6 +2,7 @@ from __future__ import absolute_import, unicode_literals
import copy
from django.conf import settings
from django.contrib import admin
from django.contrib.contenttypes.models import ContentType
from django.core import management
from django.core.exceptions import FieldError
......@@ -14,7 +15,7 @@ from django.test import TestCase
from .models import (MyPerson, Person, StatusPerson, LowerStatusPerson,
MyPersonProxy, Abstract, OtherPerson, User, UserProxy, UserProxyProxy,
Country, State, StateProxy, TrackerUser, BaseUser, Bug, ProxyTrackerUser,
Improvement, ProxyProxyBug, ProxyBug, ProxyImprovement)
Improvement, ProxyProxyBug, ProxyBug, ProxyImprovement, Issue)
class ProxyModelTests(TestCase):
......@@ -360,3 +361,28 @@ class ProxyModelTests(TestCase):
management.call_command('loaddata', 'mypeople.json', verbosity=0, commit=False)
p = MyPerson.objects.get(pk=100)
self.assertEqual(p.name, 'Elvis Presley')
class ProxyModelAdminTests(TestCase):
def setUp(self):
management.call_command('loaddata', 'myhorses.json', verbosity=0,
commit=False)
def tearDown(self):
TrackerUser.objects.all().delete()
Issue.objects.all().delete()
def test_cascade_delete_proxy_model_admin_warning(self):
"""
Test if admin gives warning about cascade deleting models referenced
to concrete model by deleting proxy object.
"""
tracker_user = TrackerUser.objects.all()[0]
base_user = BaseUser.objects.all()[0]
issue = Issue.objects.all()[0]
with self.assertNumQueries(7):
collector = admin.util.NestedObjects('default')
collector.collect(ProxyTrackerUser.objects.all())
self.assertTrue(tracker_user in collector.edges.get(None, ()))
self.assertTrue(base_user in collector.edges.get(None, ()))
self.assertTrue(issue in collector.edges.get(tracker_user, ()))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment