MCPcopy
hub / github.com/django/django / UniqueConstraint

Class UniqueConstraint

django/db/models/constraints.py:269–686  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

267
268
269class UniqueConstraint(BaseConstraint):
270 def __init__(
271 self,
272 *expressions,
273 fields=(),
274 name,
275 condition=None,
276 deferrable=None,
277 include=None,
278 opclasses=(),
279 nulls_distinct=None,
280 violation_error_code=None,
281 violation_error_message=None,
282 ):
283 if not name:
284 raise ValueError("A unique constraint must be named.")
285 if not expressions and not fields:
286 raise ValueError(
287 "At least one field or expression is required to define a "
288 "unique constraint."
289 )
290 if expressions and fields:
291 raise ValueError(
292 "UniqueConstraint.fields and expressions are mutually exclusive."
293 )
294 if not isinstance(condition, (NoneType, Q)):
295 raise ValueError("UniqueConstraint.condition must be a Q instance.")
296 if condition and deferrable:
297 raise ValueError("UniqueConstraint with conditions cannot be deferred.")
298 if include and deferrable:
299 raise ValueError("UniqueConstraint with include fields cannot be deferred.")
300 if opclasses and deferrable:
301 raise ValueError("UniqueConstraint with opclasses cannot be deferred.")
302 if expressions and deferrable:
303 raise ValueError("UniqueConstraint with expressions cannot be deferred.")
304 if expressions and opclasses:
305 raise ValueError(
306 "UniqueConstraint.opclasses cannot be used with expressions. "
307 "Use django.contrib.postgres.indexes.OpClass() instead."
308 )
309 if not isinstance(deferrable, (NoneType, Deferrable)):
310 raise TypeError(
311 "UniqueConstraint.deferrable must be a Deferrable instance."
312 )
313 if not isinstance(include, (NoneType, list, tuple)):
314 raise TypeError("UniqueConstraint.include must be a list or tuple.")
315 if not isinstance(opclasses, (list, tuple)):
316 raise TypeError("UniqueConstraint.opclasses must be a list or tuple.")
317 if not isinstance(nulls_distinct, (NoneType, bool)):
318 raise TypeError("UniqueConstraint.nulls_distinct must be a bool.")
319 if opclasses and len(fields) != len(opclasses):
320 raise ValueError(
321 "UniqueConstraint.fields and UniqueConstraint.opclasses must "
322 "have the same number of elements."
323 )
324 self.fields = tuple(fields)
325 self.condition = condition
326 self.deferrable = deferrable

Calls

no outgoing calls