summaryrefslogtreecommitdiff
path: root/tests/modeladmin/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/modeladmin/tests.py')
-rw-r--r--tests/modeladmin/tests.py411
1 files changed, 240 insertions, 171 deletions
diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py
index 6432679735..ede1a09212 100644
--- a/tests/modeladmin/tests.py
+++ b/tests/modeladmin/tests.py
@@ -3,12 +3,17 @@ from datetime import date
from django import forms
from django.contrib.admin.models import ADDITION, CHANGE, DELETION, LogEntry
from django.contrib.admin.options import (
- HORIZONTAL, VERTICAL, ModelAdmin, TabularInline,
+ HORIZONTAL,
+ VERTICAL,
+ ModelAdmin,
+ TabularInline,
get_content_type_for_model,
)
from django.contrib.admin.sites import AdminSite
from django.contrib.admin.widgets import (
- AdminDateWidget, AdminRadioSelect, AutocompleteSelect,
+ AdminDateWidget,
+ AdminRadioSelect,
+ AutocompleteSelect,
AutocompleteSelectMultiple,
)
from django.contrib.auth.models import User
@@ -34,12 +39,11 @@ request.user = MockSuperUser()
class ModelAdminTests(TestCase):
-
@classmethod
def setUpTestData(cls):
cls.band = Band.objects.create(
- name='The Doors',
- bio='',
+ name="The Doors",
+ bio="",
sign_date=date(1965, 1, 1),
)
@@ -48,7 +52,7 @@ class ModelAdminTests(TestCase):
def test_modeladmin_str(self):
ma = ModelAdmin(Band, self.site)
- self.assertEqual(str(ma), 'modeladmin.ModelAdmin')
+ self.assertEqual(str(ma), "modeladmin.ModelAdmin")
def test_default_attributes(self):
ma = ModelAdmin(Band, self.site)
@@ -59,9 +63,13 @@ class ModelAdminTests(TestCase):
def test_default_fields(self):
ma = ModelAdmin(Band, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['name', 'bio', 'sign_date'])
- self.assertEqual(list(ma.get_fields(request)), ['name', 'bio', 'sign_date'])
- self.assertEqual(list(ma.get_fields(request, self.band)), ['name', 'bio', 'sign_date'])
+ self.assertEqual(
+ list(ma.get_form(request).base_fields), ["name", "bio", "sign_date"]
+ )
+ self.assertEqual(list(ma.get_fields(request)), ["name", "bio", "sign_date"])
+ self.assertEqual(
+ list(ma.get_fields(request, self.band)), ["name", "bio", "sign_date"]
+ )
self.assertIsNone(ma.get_exclude(request, self.band))
def test_default_fieldsets(self):
@@ -72,43 +80,50 @@ class ModelAdminTests(TestCase):
# Here's the default case. There are no custom form_add/form_change methods,
# no fields argument, and no fieldsets argument.
ma = ModelAdmin(Band, self.site)
- self.assertEqual(ma.get_fieldsets(request), [(None, {'fields': ['name', 'bio', 'sign_date']})])
- self.assertEqual(ma.get_fieldsets(request, self.band), [(None, {'fields': ['name', 'bio', 'sign_date']})])
+ self.assertEqual(
+ ma.get_fieldsets(request),
+ [(None, {"fields": ["name", "bio", "sign_date"]})],
+ )
+ self.assertEqual(
+ ma.get_fieldsets(request, self.band),
+ [(None, {"fields": ["name", "bio", "sign_date"]})],
+ )
def test_get_fieldsets(self):
# get_fieldsets() is called when figuring out form fields (#18681).
class BandAdmin(ModelAdmin):
def get_fieldsets(self, request, obj=None):
- return [(None, {'fields': ['name', 'bio']})]
+ return [(None, {"fields": ["name", "bio"]})]
ma = BandAdmin(Band, self.site)
form = ma.get_form(None)
- self.assertEqual(form._meta.fields, ['name', 'bio'])
+ self.assertEqual(form._meta.fields, ["name", "bio"])
class InlineBandAdmin(TabularInline):
model = Concert
- fk_name = 'main_band'
+ fk_name = "main_band"
can_delete = False
def get_fieldsets(self, request, obj=None):
- return [(None, {'fields': ['day', 'transport']})]
+ return [(None, {"fields": ["day", "transport"]})]
ma = InlineBandAdmin(Band, self.site)
form = ma.get_formset(None).form
- self.assertEqual(form._meta.fields, ['day', 'transport'])
+ self.assertEqual(form._meta.fields, ["day", "transport"])
def test_lookup_allowed_allows_nonexistent_lookup(self):
"""
A lookup_allowed allows a parameter whose field lookup doesn't exist.
(#21129).
"""
+
class BandAdmin(ModelAdmin):
- fields = ['name']
+ fields = ["name"]
ma = BandAdmin(Band, self.site)
- self.assertTrue(ma.lookup_allowed('name__nonexistent', 'test_value'))
+ self.assertTrue(ma.lookup_allowed("name__nonexistent", "test_value"))
- @isolate_apps('modeladmin')
+ @isolate_apps("modeladmin")
def test_lookup_allowed_onetoone(self):
class Department(models.Model):
code = models.CharField(max_length=4, unique=True)
@@ -125,28 +140,34 @@ class ModelAdminTests(TestCase):
class EmployeeProfileAdmin(ModelAdmin):
list_filter = [
- 'employee__employeeinfo__description',
- 'employee__department__code',
+ "employee__employeeinfo__description",
+ "employee__department__code",
]
ma = EmployeeProfileAdmin(EmployeeProfile, self.site)
# Reverse OneToOneField
- self.assertIs(ma.lookup_allowed('employee__employeeinfo__description', 'test_value'), True)
+ self.assertIs(
+ ma.lookup_allowed("employee__employeeinfo__description", "test_value"), True
+ )
# OneToOneField and ForeignKey
- self.assertIs(ma.lookup_allowed('employee__department__code', 'test_value'), True)
+ self.assertIs(
+ ma.lookup_allowed("employee__department__code", "test_value"), True
+ )
def test_field_arguments(self):
# If fields is specified, fieldsets_add and fieldsets_change should
# just stick the fields into a formsets structure and return it.
class BandAdmin(ModelAdmin):
- fields = ['name']
+ fields = ["name"]
ma = BandAdmin(Band, self.site)
- self.assertEqual(list(ma.get_fields(request)), ['name'])
- self.assertEqual(list(ma.get_fields(request, self.band)), ['name'])
- self.assertEqual(ma.get_fieldsets(request), [(None, {'fields': ['name']})])
- self.assertEqual(ma.get_fieldsets(request, self.band), [(None, {'fields': ['name']})])
+ self.assertEqual(list(ma.get_fields(request)), ["name"])
+ self.assertEqual(list(ma.get_fields(request, self.band)), ["name"])
+ self.assertEqual(ma.get_fieldsets(request), [(None, {"fields": ["name"]})])
+ self.assertEqual(
+ ma.get_fieldsets(request, self.band), [(None, {"fields": ["name"]})]
+ )
def test_field_arguments_restricted_on_form(self):
# If fields or fieldsets is specified, it should exclude fields on the
@@ -157,41 +178,41 @@ class ModelAdminTests(TestCase):
# Using `fields`.
class BandAdmin(ModelAdmin):
- fields = ['name']
+ fields = ["name"]
ma = BandAdmin(Band, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['name'])
- self.assertEqual(list(ma.get_form(request, self.band).base_fields), ['name'])
+ self.assertEqual(list(ma.get_form(request).base_fields), ["name"])
+ self.assertEqual(list(ma.get_form(request, self.band).base_fields), ["name"])
# Using `fieldsets`.
class BandAdmin(ModelAdmin):
- fieldsets = [(None, {'fields': ['name']})]
+ fieldsets = [(None, {"fields": ["name"]})]
ma = BandAdmin(Band, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['name'])
- self.assertEqual(list(ma.get_form(request, self.band).base_fields), ['name'])
+ self.assertEqual(list(ma.get_form(request).base_fields), ["name"])
+ self.assertEqual(list(ma.get_form(request, self.band).base_fields), ["name"])
# Using `exclude`.
class BandAdmin(ModelAdmin):
- exclude = ['bio']
+ exclude = ["bio"]
ma = BandAdmin(Band, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['name', 'sign_date'])
+ self.assertEqual(list(ma.get_form(request).base_fields), ["name", "sign_date"])
# You can also pass a tuple to `exclude`.
class BandAdmin(ModelAdmin):
- exclude = ('bio',)
+ exclude = ("bio",)
ma = BandAdmin(Band, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['name', 'sign_date'])
+ self.assertEqual(list(ma.get_form(request).base_fields), ["name", "sign_date"])
# Using `fields` and `exclude`.
class BandAdmin(ModelAdmin):
- fields = ['name', 'bio']
- exclude = ['bio']
+ fields = ["name", "bio"]
+ exclude = ["bio"]
ma = BandAdmin(Band, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['name'])
+ self.assertEqual(list(ma.get_form(request).base_fields), ["name"])
def test_custom_form_meta_exclude_with_readonly(self):
"""
@@ -203,25 +224,25 @@ class ModelAdminTests(TestCase):
class AdminBandForm(forms.ModelForm):
class Meta:
model = Band
- exclude = ['bio']
+ exclude = ["bio"]
class BandAdmin(ModelAdmin):
- readonly_fields = ['name']
+ readonly_fields = ["name"]
form = AdminBandForm
ma = BandAdmin(Band, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['sign_date'])
+ self.assertEqual(list(ma.get_form(request).base_fields), ["sign_date"])
# With InlineModelAdmin
class AdminConcertForm(forms.ModelForm):
class Meta:
model = Concert
- exclude = ['day']
+ exclude = ["day"]
class ConcertInline(TabularInline):
- readonly_fields = ['transport']
+ readonly_fields = ["transport"]
form = AdminConcertForm
- fk_name = 'main_band'
+ fk_name = "main_band"
model = Concert
class BandAdmin(ModelAdmin):
@@ -230,7 +251,8 @@ class ModelAdminTests(TestCase):
ma = BandAdmin(Band, self.site)
self.assertEqual(
list(list(ma.get_formsets_with_inlines(request))[0][0]().forms[0].fields),
- ['main_band', 'opening_band', 'id', 'DELETE'])
+ ["main_band", "opening_band", "id", "DELETE"],
+ )
def test_custom_formfield_override_readonly(self):
class AdminBandForm(forms.ModelForm):
@@ -242,25 +264,19 @@ class ModelAdminTests(TestCase):
class BandAdmin(ModelAdmin):
form = AdminBandForm
- readonly_fields = ['name']
+ readonly_fields = ["name"]
ma = BandAdmin(Band, self.site)
# `name` shouldn't appear in base_fields because it's part of
# readonly_fields.
- self.assertEqual(
- list(ma.get_form(request).base_fields),
- ['bio', 'sign_date']
- )
+ self.assertEqual(list(ma.get_form(request).base_fields), ["bio", "sign_date"])
# But it should appear in get_fields()/fieldsets() so it can be
# displayed as read-only.
- self.assertEqual(
- list(ma.get_fields(request)),
- ['bio', 'sign_date', 'name']
- )
+ self.assertEqual(list(ma.get_fields(request)), ["bio", "sign_date", "name"])
self.assertEqual(
list(ma.get_fieldsets(request)),
- [(None, {'fields': ['bio', 'sign_date', 'name']})]
+ [(None, {"fields": ["bio", "sign_date", "name"]})],
)
def test_custom_form_meta_exclude(self):
@@ -272,25 +288,25 @@ class ModelAdminTests(TestCase):
class AdminBandForm(forms.ModelForm):
class Meta:
model = Band
- exclude = ['bio']
+ exclude = ["bio"]
class BandAdmin(ModelAdmin):
- exclude = ['name']
+ exclude = ["name"]
form = AdminBandForm
ma = BandAdmin(Band, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['bio', 'sign_date'])
+ self.assertEqual(list(ma.get_form(request).base_fields), ["bio", "sign_date"])
# With InlineModelAdmin
class AdminConcertForm(forms.ModelForm):
class Meta:
model = Concert
- exclude = ['day']
+ exclude = ["day"]
class ConcertInline(TabularInline):
- exclude = ['transport']
+ exclude = ["transport"]
form = AdminConcertForm
- fk_name = 'main_band'
+ fk_name = "main_band"
model = Concert
class BandAdmin(ModelAdmin):
@@ -299,41 +315,41 @@ class ModelAdminTests(TestCase):
ma = BandAdmin(Band, self.site)
self.assertEqual(
list(list(ma.get_formsets_with_inlines(request))[0][0]().forms[0].fields),
- ['main_band', 'opening_band', 'day', 'id', 'DELETE']
+ ["main_band", "opening_band", "day", "id", "DELETE"],
)
def test_overriding_get_exclude(self):
class BandAdmin(ModelAdmin):
def get_exclude(self, request, obj=None):
- return ['name']
+ return ["name"]
self.assertEqual(
list(BandAdmin(Band, self.site).get_form(request).base_fields),
- ['bio', 'sign_date']
+ ["bio", "sign_date"],
)
def test_get_exclude_overrides_exclude(self):
class BandAdmin(ModelAdmin):
- exclude = ['bio']
+ exclude = ["bio"]
def get_exclude(self, request, obj=None):
- return ['name']
+ return ["name"]
self.assertEqual(
list(BandAdmin(Band, self.site).get_form(request).base_fields),
- ['bio', 'sign_date']
+ ["bio", "sign_date"],
)
def test_get_exclude_takes_obj(self):
class BandAdmin(ModelAdmin):
def get_exclude(self, request, obj=None):
if obj:
- return ['sign_date']
- return ['name']
+ return ["sign_date"]
+ return ["name"]
self.assertEqual(
list(BandAdmin(Band, self.site).get_form(request, self.band).base_fields),
- ['name', 'bio']
+ ["name", "bio"],
)
def test_custom_form_validation(self):
@@ -346,48 +362,55 @@ class ModelAdminTests(TestCase):
form = AdminBandForm
ma = BandAdmin(Band, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['name', 'bio', 'sign_date', 'delete'])
- self.assertEqual(type(ma.get_form(request).base_fields['sign_date'].widget), AdminDateWidget)
+ self.assertEqual(
+ list(ma.get_form(request).base_fields),
+ ["name", "bio", "sign_date", "delete"],
+ )
+ self.assertEqual(
+ type(ma.get_form(request).base_fields["sign_date"].widget), AdminDateWidget
+ )
def test_form_exclude_kwarg_override(self):
"""
The `exclude` kwarg passed to `ModelAdmin.get_form()` overrides all
other declarations (#8999).
"""
+
class AdminBandForm(forms.ModelForm):
class Meta:
model = Band
- exclude = ['name']
+ exclude = ["name"]
class BandAdmin(ModelAdmin):
- exclude = ['sign_date']
+ exclude = ["sign_date"]
form = AdminBandForm
def get_form(self, request, obj=None, **kwargs):
- kwargs['exclude'] = ['bio']
+ kwargs["exclude"] = ["bio"]
return super().get_form(request, obj, **kwargs)
ma = BandAdmin(Band, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['name', 'sign_date'])
+ self.assertEqual(list(ma.get_form(request).base_fields), ["name", "sign_date"])
def test_formset_exclude_kwarg_override(self):
"""
The `exclude` kwarg passed to `InlineModelAdmin.get_formset()`
overrides all other declarations (#8999).
"""
+
class AdminConcertForm(forms.ModelForm):
class Meta:
model = Concert
- exclude = ['day']
+ exclude = ["day"]
class ConcertInline(TabularInline):
- exclude = ['transport']
+ exclude = ["transport"]
form = AdminConcertForm
- fk_name = 'main_band'
+ fk_name = "main_band"
model = Concert
def get_formset(self, request, obj=None, **kwargs):
- kwargs['exclude'] = ['opening_band']
+ kwargs["exclude"] = ["opening_band"]
return super().get_formset(request, obj, **kwargs)
class BandAdmin(ModelAdmin):
@@ -396,22 +419,22 @@ class ModelAdminTests(TestCase):
ma = BandAdmin(Band, self.site)
self.assertEqual(
list(list(ma.get_formsets_with_inlines(request))[0][0]().forms[0].fields),
- ['main_band', 'day', 'transport', 'id', 'DELETE']
+ ["main_band", "day", "transport", "id", "DELETE"],
)
def test_formset_overriding_get_exclude_with_form_fields(self):
class AdminConcertForm(forms.ModelForm):
class Meta:
model = Concert
- fields = ['main_band', 'opening_band', 'day', 'transport']
+ fields = ["main_band", "opening_band", "day", "transport"]
class ConcertInline(TabularInline):
form = AdminConcertForm
- fk_name = 'main_band'
+ fk_name = "main_band"
model = Concert
def get_exclude(self, request, obj=None):
- return ['opening_band']
+ return ["opening_band"]
class BandAdmin(ModelAdmin):
inlines = [ConcertInline]
@@ -419,22 +442,22 @@ class ModelAdminTests(TestCase):
ma = BandAdmin(Band, self.site)
self.assertEqual(
list(list(ma.get_formsets_with_inlines(request))[0][0]().forms[0].fields),
- ['main_band', 'day', 'transport', 'id', 'DELETE']
+ ["main_band", "day", "transport", "id", "DELETE"],
)
def test_formset_overriding_get_exclude_with_form_exclude(self):
class AdminConcertForm(forms.ModelForm):
class Meta:
model = Concert
- exclude = ['day']
+ exclude = ["day"]
class ConcertInline(TabularInline):
form = AdminConcertForm
- fk_name = 'main_band'
+ fk_name = "main_band"
model = Concert
def get_exclude(self, request, obj=None):
- return ['opening_band']
+ return ["opening_band"]
class BandAdmin(ModelAdmin):
inlines = [ConcertInline]
@@ -442,7 +465,7 @@ class ModelAdminTests(TestCase):
ma = BandAdmin(Band, self.site)
self.assertEqual(
list(list(ma.get_formsets_with_inlines(request))[0][0]().forms[0].fields),
- ['main_band', 'day', 'transport', 'id', 'DELETE']
+ ["main_band", "day", "transport", "id", "DELETE"],
)
def test_raw_id_fields_widget_override(self):
@@ -450,27 +473,35 @@ class ModelAdminTests(TestCase):
The autocomplete_fields, raw_id_fields, and radio_fields widgets may
overridden by specifying a widget in get_formset().
"""
+
class ConcertInline(TabularInline):
model = Concert
- fk_name = 'main_band'
- raw_id_fields = ('opening_band',)
+ fk_name = "main_band"
+ raw_id_fields = ("opening_band",)
def get_formset(self, request, obj=None, **kwargs):
- kwargs['widgets'] = {'opening_band': Select}
+ kwargs["widgets"] = {"opening_band": Select}
return super().get_formset(request, obj, **kwargs)
class BandAdmin(ModelAdmin):
inlines = [ConcertInline]
ma = BandAdmin(Band, self.site)
- band_widget = list(ma.get_formsets_with_inlines(request))[0][0]().forms[0].fields['opening_band'].widget
+ band_widget = (
+ list(ma.get_formsets_with_inlines(request))[0][0]()
+ .forms[0]
+ .fields["opening_band"]
+ .widget
+ )
# Without the override this would be ForeignKeyRawIdWidget.
self.assertIsInstance(band_widget, Select)
def test_queryset_override(self):
# If the queryset of a ModelChoiceField in a custom form is overridden,
# RelatedFieldWidgetWrapper doesn't mess that up.
- band2 = Band.objects.create(name='The Beatles', bio='', sign_date=date(1962, 1, 1))
+ band2 = Band.objects.create(
+ name="The Beatles", bio="", sign_date=date(1962, 1, 1)
+ )
ma = ModelAdmin(Concert, self.site)
form = ma.get_form(request)()
@@ -482,13 +513,15 @@ class ModelAdminTests(TestCase):
'<option value="" selected>---------</option>'
'<option value="%d">The Beatles</option>'
'<option value="%d">The Doors</option>'
- '</select></div>' % (band2.id, self.band.id)
+ "</select></div>" % (band2.id, self.band.id),
)
class AdminConcertForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self.fields["main_band"].queryset = Band.objects.filter(name='The Doors')
+ self.fields["main_band"].queryset = Band.objects.filter(
+ name="The Doors"
+ )
class ConcertAdminWithForm(ModelAdmin):
form = AdminConcertForm
@@ -502,7 +535,7 @@ class ModelAdminTests(TestCase):
'<select name="main_band" id="id_main_band" required>'
'<option value="" selected>---------</option>'
'<option value="%d">The Doors</option>'
- '</select></div>' % self.band.id
+ "</select></div>" % self.band.id,
)
def test_regression_for_ticket_15820(self):
@@ -510,18 +543,19 @@ class ModelAdminTests(TestCase):
`obj` is passed from `InlineModelAdmin.get_fieldsets()` to
`InlineModelAdmin.get_formset()`.
"""
+
class CustomConcertForm(forms.ModelForm):
class Meta:
model = Concert
- fields = ['day']
+ fields = ["day"]
class ConcertInline(TabularInline):
model = Concert
- fk_name = 'main_band'
+ fk_name = "main_band"
def get_formset(self, request, obj=None, **kwargs):
if obj:
- kwargs['form'] = CustomConcertForm
+ kwargs["form"] = CustomConcertForm
return super().get_formset(request, obj, **kwargs)
class BandAdmin(ModelAdmin):
@@ -531,9 +565,13 @@ class ModelAdminTests(TestCase):
ma = BandAdmin(Band, self.site)
inline_instances = ma.get_inline_instances(request)
fieldsets = list(inline_instances[0].get_fieldsets(request))
- self.assertEqual(fieldsets[0][1]['fields'], ['main_band', 'opening_band', 'day', 'transport'])
- fieldsets = list(inline_instances[0].get_fieldsets(request, inline_instances[0].model))
- self.assertEqual(fieldsets[0][1]['fields'], ['day'])
+ self.assertEqual(
+ fieldsets[0][1]["fields"], ["main_band", "opening_band", "day", "transport"]
+ )
+ fieldsets = list(
+ inline_instances[0].get_fieldsets(request, inline_instances[0].model)
+ )
+ self.assertEqual(fieldsets[0][1]["fields"], ["day"])
# radio_fields behavior ###########################################
@@ -546,25 +584,27 @@ class ModelAdminTests(TestCase):
cma = ModelAdmin(Concert, self.site)
cmafa = cma.get_form(request)
- self.assertEqual(type(cmafa.base_fields['main_band'].widget.widget), Select)
+ self.assertEqual(type(cmafa.base_fields["main_band"].widget.widget), Select)
self.assertEqual(
- list(cmafa.base_fields['main_band'].widget.choices),
- [('', '---------'), (self.band.id, 'The Doors')])
+ list(cmafa.base_fields["main_band"].widget.choices),
+ [("", "---------"), (self.band.id, "The Doors")],
+ )
- self.assertEqual(type(cmafa.base_fields['opening_band'].widget.widget), Select)
+ self.assertEqual(type(cmafa.base_fields["opening_band"].widget.widget), Select)
self.assertEqual(
- list(cmafa.base_fields['opening_band'].widget.choices),
- [('', '---------'), (self.band.id, 'The Doors')]
+ list(cmafa.base_fields["opening_band"].widget.choices),
+ [("", "---------"), (self.band.id, "The Doors")],
)
- self.assertEqual(type(cmafa.base_fields['day'].widget), Select)
+ self.assertEqual(type(cmafa.base_fields["day"].widget), Select)
self.assertEqual(
- list(cmafa.base_fields['day'].widget.choices),
- [('', '---------'), (1, 'Fri'), (2, 'Sat')]
+ list(cmafa.base_fields["day"].widget.choices),
+ [("", "---------"), (1, "Fri"), (2, "Sat")],
)
- self.assertEqual(type(cmafa.base_fields['transport'].widget), Select)
+ self.assertEqual(type(cmafa.base_fields["transport"].widget), Select)
self.assertEqual(
- list(cmafa.base_fields['transport'].widget.choices),
- [('', '---------'), (1, 'Plane'), (2, 'Train'), (3, 'Bus')])
+ list(cmafa.base_fields["transport"].widget.choices),
+ [("", "---------"), (1, "Plane"), (2, "Train"), (3, "Bus")],
+ )
def test_foreign_key_as_radio_field(self):
# Now specify all the fields as radio_fields. Widgets should now be
@@ -573,67 +613,81 @@ class ModelAdminTests(TestCase):
# 'radiolist' attr, and 'inline' as well if the field is specified HORIZONTAL.
class ConcertAdmin(ModelAdmin):
radio_fields = {
- 'main_band': HORIZONTAL,
- 'opening_band': VERTICAL,
- 'day': VERTICAL,
- 'transport': HORIZONTAL,
+ "main_band": HORIZONTAL,
+ "opening_band": VERTICAL,
+ "day": VERTICAL,
+ "transport": HORIZONTAL,
}
cma = ConcertAdmin(Concert, self.site)
cmafa = cma.get_form(request)
- self.assertEqual(type(cmafa.base_fields['main_band'].widget.widget), AdminRadioSelect)
- self.assertEqual(cmafa.base_fields['main_band'].widget.attrs, {'class': 'radiolist inline'})
self.assertEqual(
- list(cmafa.base_fields['main_band'].widget.choices),
- [(self.band.id, 'The Doors')]
+ type(cmafa.base_fields["main_band"].widget.widget), AdminRadioSelect
+ )
+ self.assertEqual(
+ cmafa.base_fields["main_band"].widget.attrs, {"class": "radiolist inline"}
+ )
+ self.assertEqual(
+ list(cmafa.base_fields["main_band"].widget.choices),
+ [(self.band.id, "The Doors")],
)
- self.assertEqual(type(cmafa.base_fields['opening_band'].widget.widget), AdminRadioSelect)
- self.assertEqual(cmafa.base_fields['opening_band'].widget.attrs, {'class': 'radiolist'})
self.assertEqual(
- list(cmafa.base_fields['opening_band'].widget.choices),
- [('', 'None'), (self.band.id, 'The Doors')]
+ type(cmafa.base_fields["opening_band"].widget.widget), AdminRadioSelect
+ )
+ self.assertEqual(
+ cmafa.base_fields["opening_band"].widget.attrs, {"class": "radiolist"}
+ )
+ self.assertEqual(
+ list(cmafa.base_fields["opening_band"].widget.choices),
+ [("", "None"), (self.band.id, "The Doors")],
+ )
+ self.assertEqual(type(cmafa.base_fields["day"].widget), AdminRadioSelect)
+ self.assertEqual(cmafa.base_fields["day"].widget.attrs, {"class": "radiolist"})
+ self.assertEqual(
+ list(cmafa.base_fields["day"].widget.choices), [(1, "Fri"), (2, "Sat")]
)
- self.assertEqual(type(cmafa.base_fields['day'].widget), AdminRadioSelect)
- self.assertEqual(cmafa.base_fields['day'].widget.attrs, {'class': 'radiolist'})
- self.assertEqual(list(cmafa.base_fields['day'].widget.choices), [(1, 'Fri'), (2, 'Sat')])
- self.assertEqual(type(cmafa.base_fields['transport'].widget), AdminRadioSelect)
- self.assertEqual(cmafa.base_fields['transport'].widget.attrs, {'class': 'radiolist inline'})
+ self.assertEqual(type(cmafa.base_fields["transport"].widget), AdminRadioSelect)
self.assertEqual(
- list(cmafa.base_fields['transport'].widget.choices),
- [('', 'None'), (1, 'Plane'), (2, 'Train'), (3, 'Bus')]
+ cmafa.base_fields["transport"].widget.attrs, {"class": "radiolist inline"}
+ )
+ self.assertEqual(
+ list(cmafa.base_fields["transport"].widget.choices),
+ [("", "None"), (1, "Plane"), (2, "Train"), (3, "Bus")],
)
class AdminConcertForm(forms.ModelForm):
class Meta:
model = Concert
- exclude = ('transport',)
+ exclude = ("transport",)
class ConcertAdmin(ModelAdmin):
form = AdminConcertForm
ma = ConcertAdmin(Concert, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['main_band', 'opening_band', 'day'])
+ self.assertEqual(
+ list(ma.get_form(request).base_fields), ["main_band", "opening_band", "day"]
+ )
class AdminConcertForm(forms.ModelForm):
extra = forms.CharField()
class Meta:
model = Concert
- fields = ['extra', 'transport']
+ fields = ["extra", "transport"]
class ConcertAdmin(ModelAdmin):
form = AdminConcertForm
ma = ConcertAdmin(Concert, self.site)
- self.assertEqual(list(ma.get_form(request).base_fields), ['extra', 'transport'])
+ self.assertEqual(list(ma.get_form(request).base_fields), ["extra", "transport"])
class ConcertInline(TabularInline):
form = AdminConcertForm
model = Concert
- fk_name = 'main_band'
+ fk_name = "main_band"
can_delete = True
class BandAdmin(ModelAdmin):
@@ -642,30 +696,30 @@ class ModelAdminTests(TestCase):
ma = BandAdmin(Band, self.site)
self.assertEqual(
list(list(ma.get_formsets_with_inlines(request))[0][0]().forms[0].fields),
- ['extra', 'transport', 'id', 'DELETE', 'main_band']
+ ["extra", "transport", "id", "DELETE", "main_band"],
)
def test_log_actions(self):
ma = ModelAdmin(Band, self.site)
mock_request = MockRequest()
- mock_request.user = User.objects.create(username='bill')
+ mock_request.user = User.objects.create(username="bill")
content_type = get_content_type_for_model(self.band)
tests = (
- (ma.log_addition, ADDITION, {'added': {}}),
- (ma.log_change, CHANGE, {'changed': {'fields': ['name', 'bio']}}),
+ (ma.log_addition, ADDITION, {"added": {}}),
+ (ma.log_change, CHANGE, {"changed": {"fields": ["name", "bio"]}}),
(ma.log_deletion, DELETION, str(self.band)),
)
for method, flag, message in tests:
with self.subTest(name=method.__name__):
created = method(mock_request, self.band, message)
- fetched = LogEntry.objects.filter(action_flag=flag).latest('id')
+ fetched = LogEntry.objects.filter(action_flag=flag).latest("id")
self.assertEqual(created, fetched)
self.assertEqual(fetched.action_flag, flag)
self.assertEqual(fetched.content_type, content_type)
self.assertEqual(fetched.object_id, str(self.band.pk))
self.assertEqual(fetched.user, mock_request.user)
if flag == DELETION:
- self.assertEqual(fetched.change_message, '')
+ self.assertEqual(fetched.change_message, "")
self.assertEqual(fetched.object_repr, message)
else:
self.assertEqual(fetched.change_message, str(message))
@@ -673,37 +727,46 @@ class ModelAdminTests(TestCase):
def test_get_autocomplete_fields(self):
class NameAdmin(ModelAdmin):
- search_fields = ['name']
+ search_fields = ["name"]
class SongAdmin(ModelAdmin):
- autocomplete_fields = ['featuring']
- fields = ['featuring', 'band']
+ autocomplete_fields = ["featuring"]
+ fields = ["featuring", "band"]
class OtherSongAdmin(SongAdmin):
def get_autocomplete_fields(self, request):
- return ['band']
+ return ["band"]
self.site.register(Band, NameAdmin)
try:
# Uses autocomplete_fields if not overridden.
model_admin = SongAdmin(Song, self.site)
form = model_admin.get_form(request)()
- self.assertIsInstance(form.fields['featuring'].widget.widget, AutocompleteSelectMultiple)
+ self.assertIsInstance(
+ form.fields["featuring"].widget.widget, AutocompleteSelectMultiple
+ )
# Uses overridden get_autocomplete_fields
model_admin = OtherSongAdmin(Song, self.site)
form = model_admin.get_form(request)()
- self.assertIsInstance(form.fields['band'].widget.widget, AutocompleteSelect)
+ self.assertIsInstance(form.fields["band"].widget.widget, AutocompleteSelect)
finally:
self.site.unregister(Band)
def test_get_deleted_objects(self):
mock_request = MockRequest()
- mock_request.user = User.objects.create_superuser(username='bob', email='bob@test.com', password='test')
+ mock_request.user = User.objects.create_superuser(
+ username="bob", email="bob@test.com", password="test"
+ )
self.site.register(Band, ModelAdmin)
ma = self.site._registry[Band]
- deletable_objects, model_count, perms_needed, protected = ma.get_deleted_objects([self.band], request)
- self.assertEqual(deletable_objects, ['Band: The Doors'])
- self.assertEqual(model_count, {'bands': 1})
+ (
+ deletable_objects,
+ model_count,
+ perms_needed,
+ protected,
+ ) = ma.get_deleted_objects([self.band], request)
+ self.assertEqual(deletable_objects, ["Band: The Doors"])
+ self.assertEqual(model_count, {"bands": 1})
self.assertEqual(perms_needed, set())
self.assertEqual(protected, [])
@@ -713,7 +776,9 @@ class ModelAdminTests(TestCase):
for permissions checking.
"""
mock_request = MockRequest()
- mock_request.user = User.objects.create_superuser(username='bob', email='bob@test.com', password='test')
+ mock_request.user = User.objects.create_superuser(
+ username="bob", email="bob@test.com", password="test"
+ )
class TestModelAdmin(ModelAdmin):
def has_delete_permission(self, request, obj=None):
@@ -721,10 +786,15 @@ class ModelAdminTests(TestCase):
self.site.register(Band, TestModelAdmin)
ma = self.site._registry[Band]
- deletable_objects, model_count, perms_needed, protected = ma.get_deleted_objects([self.band], request)
- self.assertEqual(deletable_objects, ['Band: The Doors'])
- self.assertEqual(model_count, {'bands': 1})
- self.assertEqual(perms_needed, {'band'})
+ (
+ deletable_objects,
+ model_count,
+ perms_needed,
+ protected,
+ ) = ma.get_deleted_objects([self.band], request)
+ self.assertEqual(deletable_objects, ["Band: The Doors"])
+ self.assertEqual(model_count, {"bands": 1})
+ self.assertEqual(perms_needed, {"band"})
self.assertEqual(protected, [])
def test_modeladmin_repr(self):
@@ -736,26 +806,25 @@ class ModelAdminTests(TestCase):
class ModelAdminPermissionTests(SimpleTestCase):
-
class MockUser:
def has_module_perms(self, app_label):
- return app_label == 'modeladmin'
+ return app_label == "modeladmin"
class MockViewUser(MockUser):
def has_perm(self, perm, obj=None):
- return perm == 'modeladmin.view_band'
+ return perm == "modeladmin.view_band"
class MockAddUser(MockUser):
def has_perm(self, perm, obj=None):
- return perm == 'modeladmin.add_band'
+ return perm == "modeladmin.add_band"
class MockChangeUser(MockUser):
def has_perm(self, perm, obj=None):
- return perm == 'modeladmin.change_band'
+ return perm == "modeladmin.change_band"
class MockDeleteUser(MockUser):
def has_perm(self, perm, obj=None):
- return perm == 'modeladmin.delete_band'
+ return perm == "modeladmin.delete_band"
def test_has_view_permission(self):
"""
@@ -803,7 +872,7 @@ class ModelAdminPermissionTests(SimpleTestCase):
request = MockRequest()
request.user = self.MockAddUser()
self.assertEqual(ma.get_inline_instances(request), [])
- band = Band(name='The Doors', bio='', sign_date=date(1965, 1, 1))
+ band = Band(name="The Doors", bio="", sign_date=date(1965, 1, 1))
inline_instances = ma.get_inline_instances(request, band)
self.assertEqual(len(inline_instances), 1)
self.assertIsInstance(inline_instances[0], ConcertInline)
@@ -857,7 +926,7 @@ class ModelAdminPermissionTests(SimpleTestCase):
self.assertTrue(ma.has_module_permission(request))
original_app_label = ma.opts.app_label
- ma.opts.app_label = 'anotherapp'
+ ma.opts.app_label = "anotherapp"
try:
request.user = self.MockViewUser()
self.assertIs(ma.has_module_permission(request), False)