|
4 | 4 |
|
5 | 5 | from django.core.exceptions import SuspiciousOperation |
6 | 6 | from django.db import connections, models, router |
7 | | -from django.db.models import Expression |
| 7 | +from django.db.models import Expression, Q |
8 | 8 | from django.db.models.fields import NOT_PROVIDED |
9 | 9 |
|
10 | 10 | from .sql import PostgresInsertQuery, PostgresQuery |
@@ -82,8 +82,8 @@ def on_conflict( |
82 | 82 | self, |
83 | 83 | fields: ConflictTarget, |
84 | 84 | action: ConflictAction, |
85 | | - index_predicate: Optional[Union[Expression, str]] = None, |
86 | | - update_condition: Optional[Expression] = None, |
| 85 | + index_predicate: Optional[Union[Expression, Q, str]] = None, |
| 86 | + update_condition: Optional[Union[Expression, Q, str]] = None, |
87 | 87 | ): |
88 | 88 | """Sets the action to take when conflicts arise when attempting to |
89 | 89 | insert/create a new row. |
@@ -257,9 +257,9 @@ def upsert( |
257 | 257 | self, |
258 | 258 | conflict_target: ConflictTarget, |
259 | 259 | fields: dict, |
260 | | - index_predicate: Optional[Union[Expression, str]] = None, |
| 260 | + index_predicate: Optional[Union[Expression, Q, str]] = None, |
261 | 261 | using: Optional[str] = None, |
262 | | - update_condition: Optional[Expression] = None, |
| 262 | + update_condition: Optional[Union[Expression, Q, str]] = None, |
263 | 263 | ) -> int: |
264 | 264 | """Creates a new record or updates the existing one with the specified |
265 | 265 | data. |
@@ -298,9 +298,9 @@ def upsert_and_get( |
298 | 298 | self, |
299 | 299 | conflict_target: ConflictTarget, |
300 | 300 | fields: dict, |
301 | | - index_predicate: Optional[Union[Expression, str]] = None, |
| 301 | + index_predicate: Optional[Union[Expression, Q, str]] = None, |
302 | 302 | using: Optional[str] = None, |
303 | | - update_condition: Optional[Expression] = None, |
| 303 | + update_condition: Optional[Union[Expression, Q, str]] = None, |
304 | 304 | ): |
305 | 305 | """Creates a new record or updates the existing one with the specified |
306 | 306 | data and then gets the row. |
@@ -340,10 +340,10 @@ def bulk_upsert( |
340 | 340 | self, |
341 | 341 | conflict_target: ConflictTarget, |
342 | 342 | rows: Iterable[Dict], |
343 | | - index_predicate: Optional[Union[Expression, str]] = None, |
| 343 | + index_predicate: Optional[Union[Expression, Q, str]] = None, |
344 | 344 | return_model: bool = False, |
345 | 345 | using: Optional[str] = None, |
346 | | - update_condition: Optional[Expression] = None, |
| 346 | + update_condition: Optional[Union[Expression, Q, str]] = None, |
347 | 347 | ): |
348 | 348 | """Creates a set of new records or updates the existing ones with the |
349 | 349 | specified data. |
|
0 commit comments