kopia lustrzana https://github.com/wagtail/wagtail
Simplify UniqueConstraint check for custom rendition models
rodzic
530cc5c355
commit
ad70e5fdb6
|
@ -24,7 +24,7 @@ from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.core.files import File
|
from django.core.files import File
|
||||||
from django.core.files.storage import InvalidStorageError, default_storage, storages
|
from django.core.files.storage import InvalidStorageError, default_storage, storages
|
||||||
from django.db import models
|
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.forms.utils import flatatt
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.functional import cached_property, classproperty
|
from django.utils.functional import cached_property, classproperty
|
||||||
|
@ -1384,28 +1384,20 @@ class AbstractRendition(ImageFileMixin, models.Model):
|
||||||
def check(cls, **kwargs):
|
def check(cls, **kwargs):
|
||||||
errors = super().check(**kwargs)
|
errors = super().check(**kwargs)
|
||||||
if not cls._meta.abstract:
|
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(
|
in_unique_together = any(
|
||||||
set(constraint) == {"image", "filter_spec", "focal_point_key"}
|
set(constraint) == unique_constraint_fields
|
||||||
for constraint in cls._meta.unique_together
|
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(
|
in_unique_constraint = any(
|
||||||
set(constraint) == {"image", "filter_spec", "focal_point_key"}
|
isinstance(constraint, models.UniqueConstraint)
|
||||||
for constraint in unique_constraint_fields
|
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:
|
if not in_unique_together and not in_unique_constraint:
|
||||||
errors.append(
|
errors.append(
|
||||||
checks.Error(
|
checks.Error(
|
||||||
|
|
Ładowanie…
Reference in New Issue