summaryrefslogtreecommitdiff
path: root/tests/modeladmin
diff options
context:
space:
mode:
authorJohn Parton <john.parton.iv@gmail.com>2024-07-24 13:53:06 -0500
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2024-08-05 15:27:20 +0200
commit7f8d839722b72aeb3ec5a4278ae57c18283acacd (patch)
tree688596406caa8fa66da115a31e0150fb118ffa9e /tests/modeladmin
parent90adba85b29230acfe354bffd82bc0d3a4d63c9d (diff)
Fixed #35628 -- Allowed compatible GeneratedFields for ModelAdmin.date_hierarchy.
Diffstat (limited to 'tests/modeladmin')
-rw-r--r--tests/modeladmin/test_checks.py55
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"