summaryrefslogtreecommitdiff
path: root/tests/admin_views
diff options
context:
space:
mode:
Diffstat (limited to 'tests/admin_views')
-rw-r--r--tests/admin_views/admin.py19
-rw-r--r--tests/admin_views/models.py4
-rw-r--r--tests/admin_views/test_history_view.py45
-rw-r--r--tests/admin_views/tests.py2
4 files changed, 67 insertions, 3 deletions
diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py
index 8f0aaf843f..44333e893f 100644
--- a/tests/admin_views/admin.py
+++ b/tests/admin_views/admin.py
@@ -893,8 +893,27 @@ class CityInlineAdmin(admin.TabularInline):
view_on_site = False
+class StateAdminForm(forms.ModelForm):
+ nolabel_form_field = forms.BooleanField(required=False)
+
+ class Meta:
+ model = State
+ fields = '__all__'
+ labels = {"name": "State name (from form's Meta.labels)"}
+
+ @property
+ def changed_data(self):
+ data = super().changed_data
+ if data:
+ # Add arbitrary name to changed_data to test
+ # change message construction.
+ return data + ['not_a_form_field']
+ return data
+
+
class StateAdmin(admin.ModelAdmin):
inlines = [CityInlineAdmin]
+ form = StateAdminForm
class RestaurantInlineAdmin(admin.TabularInline):
diff --git a/tests/admin_views/models.py b/tests/admin_views/models.py
index 9ac3c53bab..a519f7395d 100644
--- a/tests/admin_views/models.py
+++ b/tests/admin_views/models.py
@@ -864,12 +864,12 @@ class EmptyModelMixin(models.Model):
class State(models.Model):
- name = models.CharField(max_length=100)
+ name = models.CharField(max_length=100, verbose_name='State verbose_name')
class City(models.Model):
state = models.ForeignKey(State, models.CASCADE)
- name = models.CharField(max_length=100)
+ name = models.CharField(max_length=100, verbose_name='City verbose_name')
def get_absolute_url(self):
return '/dummy/%s/' % self.pk
diff --git a/tests/admin_views/test_history_view.py b/tests/admin_views/test_history_view.py
new file mode 100644
index 0000000000..fdcb9e5267
--- /dev/null
+++ b/tests/admin_views/test_history_view.py
@@ -0,0 +1,45 @@
+from django.contrib.admin.models import LogEntry
+from django.contrib.auth.models import User
+from django.test import TestCase, override_settings
+from django.urls import reverse
+
+from .models import City, State
+
+
+@override_settings(ROOT_URLCONF='admin_views.urls')
+class AdminHistoryViewTests(TestCase):
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.superuser = User.objects.create_superuser(
+ username='super', password='secret', email='super@example.com',
+ )
+
+ def setUp(self):
+ self.client.force_login(self.superuser)
+
+ def test_changed_message_uses_form_lables(self):
+ """
+ Admin's model history change messages use form labels instead of
+ field names.
+ """
+ state = State.objects.create(name='My State Name')
+ city = City.objects.create(name='My City Name', state=state)
+ change_dict = {
+ 'name': 'My State Name 2',
+ 'nolabel_form_field': True,
+ 'city_set-0-name': 'My City name 2',
+ 'city_set-0-id': city.pk,
+ 'city_set-TOTAL_FORMS': '3',
+ 'city_set-INITIAL_FORMS': '1',
+ 'city_set-MAX_NUM_FORMS': '0',
+ }
+ state_change_url = reverse('admin:admin_views_state_change', args=(state.pk,))
+ self.client.post(state_change_url, change_dict)
+ logentry = LogEntry.objects.filter(content_type__model__iexact='state').latest('id')
+ self.assertEqual(
+ logentry.get_change_message(),
+ 'Changed State name (from form\'s Meta.labels), '
+ 'nolabel_form_field and not_a_form_field. '
+ 'Changed City verbose_name for city "%s".' % city
+ )
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index 87835eb37b..203551fa39 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -900,7 +900,7 @@ class AdminViewBasicTest(AdminViewBasicTestCase):
self.assertRedirects(response, reverse('admin:admin_views_readablepizza_changelist'))
pizza_ctype = ContentType.objects.get_for_model(ReadablePizza, for_concrete_model=False)
log = LogEntry.objects.filter(content_type=pizza_ctype, object_id=pizza.pk).first()
- self.assertEqual(log.get_change_message(), 'Changed toppings.')
+ self.assertEqual(log.get_change_message(), 'Changed Toppings.')
def test_allows_attributeerror_to_bubble_up(self):
"""