Re-allow expressions in UniqueConstraint (#1220)

This commit is contained in:
Adam Johnson authored and GitHub committed 2022-10-31 15:11:07 +03:00
1 parent 2a17d3f08f
commit f566734799
2 files changed
+53 -7

No files matched your search

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