diff options
| author | John Parton <john.parton.iv@gmail.com> | 2024-07-24 13:53:06 -0500 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-08-05 15:27:20 +0200 |
| commit | 7f8d839722b72aeb3ec5a4278ae57c18283acacd (patch) | |
| tree | 688596406caa8fa66da115a31e0150fb118ffa9e /tests/modeladmin | |
| parent | 90adba85b29230acfe354bffd82bc0d3a4d63c9d (diff) | |
Fixed #35628 -- Allowed compatible GeneratedFields for ModelAdmin.date_hierarchy.
Diffstat (limited to 'tests/modeladmin')
| -rw-r--r-- | tests/modeladmin/test_checks.py | 55 |
1 files changed, 53 insertions, 2 deletions
diff --git a/tests/modeladmin/test_checks.py b/tests/modeladmin/test_checks.py index f767a6c92b..94a80ca006 100644 --- a/tests/modeladmin/test_checks.py +++ b/tests/modeladmin/test_checks.py @@ -4,16 +4,17 @@ from django.contrib.admin import BooleanFieldListFilter, SimpleListFilter from django.contrib.admin.options import VERTICAL, ModelAdmin, TabularInline from django.contrib.admin.sites import AdminSite from django.core.checks import Error +from django.db import models from django.db.models import CASCADE, F, Field, ForeignKey, ManyToManyField, Model from django.db.models.functions import Upper from django.forms.models import BaseModelFormSet -from django.test import SimpleTestCase +from django.test import TestCase, skipUnlessDBFeature from django.test.utils import isolate_apps from .models import Band, Song, User, ValidationTestInlineModel, ValidationTestModel -class CheckTestCase(SimpleTestCase): +class CheckTestCase(TestCase): def assertIsInvalid( self, model_admin, @@ -97,6 +98,29 @@ class RawIdCheckTests(CheckTestCase): self.assertIsValid(TestModelAdmin, ValidationTestModel) + @isolate_apps("modeladmin") + def assertGeneratedDateTimeFieldIsValid(self, *, db_persist): + class TestModel(Model): + date = models.DateTimeField() + date_copy = models.GeneratedField( + expression=F("date"), + output_field=models.DateTimeField(), + db_persist=db_persist, + ) + + class TestModelAdmin(ModelAdmin): + date_hierarchy = "date_copy" + + self.assertIsValid(TestModelAdmin, TestModel) + + @skipUnlessDBFeature("supports_stored_generated_columns") + def test_valid_case_stored_generated_field(self): + self.assertGeneratedDateTimeFieldIsValid(db_persist=True) + + @skipUnlessDBFeature("supports_virtual_generated_columns") + def test_valid_case_virtual_generated_field(self): + self.assertGeneratedDateTimeFieldIsValid(db_persist=False) + def test_field_attname(self): class TestModelAdmin(ModelAdmin): raw_id_fields = ["band_id"] @@ -1029,6 +1053,33 @@ class DateHierarchyCheckTests(CheckTestCase): "admin.E128", ) + @isolate_apps("modeladmin") + def assertGeneratedIntegerFieldIsInvalid(self, *, db_persist): + class TestModel(Model): + generated = models.GeneratedField( + expression=models.Value(1), + output_field=models.IntegerField(), + db_persist=db_persist, + ) + + class TestModelAdmin(ModelAdmin): + date_hierarchy = "generated" + + self.assertIsInvalid( + TestModelAdmin, + TestModel, + "The value of 'date_hierarchy' must be a DateField or DateTimeField.", + "admin.E128", + ) + + @skipUnlessDBFeature("supports_stored_generated_columns") + def test_related_invalid_field_type_stored_generated_field(self): + self.assertGeneratedIntegerFieldIsInvalid(db_persist=True) + + @skipUnlessDBFeature("supports_virtual_generated_columns") + def test_related_invalid_field_type_virtual_generated_field(self): + self.assertGeneratedIntegerFieldIsInvalid(db_persist=False) + def test_valid_case(self): class TestModelAdmin(ModelAdmin): date_hierarchy = "pub_date" |
