Re-allow expressions in UniqueConstraint (#1220)

This commit is contained in:
Adam Johnson
2022-10-31 12:11:07 +00:00
committed by GitHub
parent 2a17d3f08f
commit f566734799
2 changed files with 53 additions and 7 deletions

View File

@@ -1,5 +1,5 @@
from enum import Enum
from typing import Any, Optional, Sequence, Tuple, Type, TypeVar, Union
from typing import Any, Optional, Sequence, Tuple, Type, TypeVar, Union, overload
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.models.base import Model
@@ -32,14 +32,23 @@ class UniqueConstraint(BaseConstraint):
fields: Tuple[str, ...]
condition: Optional[Q]
deferrable: Optional[Deferrable]
@overload
def __init__(
self,
*,
# For 4.0:
# *expressions: Union[str, Combinable],
# fields: Optional[Sequence[str]] = ...,
# name: str = ...,
fields: Optional[Sequence[str]],
*expressions: Union[str, Combinable],
fields: None = ...,
name: str,
condition: Optional[Q] = ...,
deferrable: Optional[Deferrable] = ...,
include: Optional[Sequence[str]] = ...,
opclasses: Sequence[Any] = ...,
) -> None: ...
@overload
def __init__(
self,
*,
fields: Sequence[str],
name: str,
condition: Optional[Q] = ...,
deferrable: Optional[Deferrable] = ...,

View File

@@ -0,0 +1,37 @@
- case: unique_constraint_expressions
main: |
from django.db.models import Q, UniqueConstraint
from django.db.models.functions import Lower
UniqueConstraint(
Lower('name').desc(),
'category',
name='unique_lower_name_category',
)
- case: unique_constraint_fields
main: |
from django.db.models import Q, UniqueConstraint
from django.db.models.functions import Lower
UniqueConstraint(
fields=['name'],
name='unqiue_name',
)
- case: unique_constraint_expressions_fields
main: |
from django.db.models import Q, UniqueConstraint
from django.db.models.functions import Lower
UniqueConstraint(
Lower('name'),
fields=['name'],
name='unique_mess',
)
regex: true
out: |
main:4: error: No overload variant of "UniqueConstraint" matches argument types "Lower", "List\[str\]", "str"
main:4: note: Possible overload variants:
main:4: note: .*
main:4: note: .*