Simplify UniqueConstraint check for custom rendition models

pull/8716/head
Sage Abdullah 2025-02-06 11:46:26 +00:00
rodzic 530cc5c355
commit ad70e5fdb6
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: EB1A33CC51CC0217
1 zmienionych plików z 9 dodań i 17 usunięć

Wyświetl plik

@ -24,7 +24,7 @@ from django.core.exceptions import ImproperlyConfigured
from django.core.files import File
from django.core.files.storage import InvalidStorageError, default_storage, storages
from django.db import models
from django.db.models import Q, UniqueConstraint
from django.db.models import Q
from django.forms.utils import flatatt
from django.urls import reverse
from django.utils.functional import cached_property, classproperty
@ -1384,28 +1384,20 @@ class AbstractRendition(ImageFileMixin, models.Model):
def check(cls, **kwargs):
errors = super().check(**kwargs)
if not cls._meta.abstract:
# Allow unique constraint to be defined via `unique_together` or
# a `UniqueConstraint` in `constraints`.
unique_constraint_fields = {"image", "filter_spec", "focal_point_key"}
in_unique_together = any(
set(constraint) == {"image", "filter_spec", "focal_point_key"}
set(constraint) == unique_constraint_fields
for constraint in cls._meta.unique_together
)
# We only include fields to check if they are a UniqueConstraint, and
# they have no conditions on them.
unique_constraint_fields = [
constraint.fields
for constraint in cls._meta.constraints
if (
isinstance(constraint, UniqueConstraint)
and constraint.condition is None
)
]
in_unique_constraint = any(
set(constraint) == {"image", "filter_spec", "focal_point_key"}
for constraint in unique_constraint_fields
isinstance(constraint, models.UniqueConstraint)
and constraint.condition is None
and set(constraint.fields) == unique_constraint_fields
for constraint in cls._meta.constraints
)
# We check for some kind of unique constraint, whether in unique together or
# as part of the constraints.
if not in_unique_together and not in_unique_constraint:
errors.append(
checks.Error(