class documentation

class BaseExpression:

Known subclasses: django.db.models.expressions.Expression, django.db.models.expressions.Subquery, django.db.models.sql.query.Query

View In Hierarchy

Base class for all query expressions.
Static Method ​_convert​_value​_noop Undocumented
Method __getstate__ Undocumented
Method __init__ Undocumented
Method ​_parse​_expressions Undocumented
Method ​_resolve​_output​_field Attempt to infer the output type of the expression. If the output fields of all source fields match then, simply infer the same type here. This isn't always correct, but it makes sense most of the time.
Method as​_sql Responsible for returning a (sql, [params]) tuple to be included in the current query.
Method asc Undocumented
Method copy Undocumented
Method desc Undocumented
Method flatten Recursively yield this expression and all subexpressions, in depth-first order.
Method get​_db​_converters Undocumented
Method get​_group​_by​_cols Undocumented
Method get​_lookup Undocumented
Method get​_source​_expressions Undocumented
Method get​_source​_fields Return the underlying field types used by this aggregate.
Method get​_transform Undocumented
Method relabeled​_clone Undocumented
Method resolve​_expression Provide the chance to do any preprocessing or validation before being added to the query.
Method reverse​_ordering Undocumented
Method select​_format Custom format for select clauses. For example, EXISTS expressions need to be wrapped in CASE WHEN on Oracle.
Method set​_source​_expressions Undocumented
Class Variable ​_output​_field​_resolved​_to​_none Undocumented
Class Variable filterable Undocumented
Class Variable is​_summary Undocumented
Class Variable window​_compatible Undocumented
Property ​_output​_field​_or​_none Return the output field of this expression, or None if _resolve_output_field() didn't return an output type.
Property conditional Undocumented
Property contains​_aggregate Undocumented
Property contains​_column​_references Undocumented
Property contains​_over​_clause Undocumented
Property convert​_value Expressions provide their own converters because users have the option of manually specifying the output_field which may be a different type from the one the database returns.
Property field Undocumented
Property output​_field Return the output type of this expressions.
@staticmethod
def _convert_value_noop(value, expression, connection):

Undocumented

def __getstate__(self):

Undocumented

def _parse_expressions(self, *expressions):

Undocumented

def _resolve_output_field(self):

Attempt to infer the output type of the expression. If the output fields of all source fields match then, simply infer the same type here. This isn't always correct, but it makes sense most of the time.

Consider the difference between 2 + 2 and 2 / 3. Inferring the type here is a convenience for the common case. The user should supply their own output_field with more complex computations.

If a source's output field resolves to None, exclude it from this check. If all sources are None, then an error is raised higher up the stack in the output_field property.

def as_sql(self, compiler, connection):

Responsible for returning a (sql, [params]) tuple to be included in the current query.

Different backends can provide their own implementation, by providing an as_{vendor} method and patching the Expression:

``` def override_as_sql(self, compiler, connection):

# custom logic return super().as_sql(compiler, connection)

setattr(Expression, 'as_' + connection.vendor, override_as_sql) ```

Arguments:
  • compiler: the query compiler responsible for generating the query. Must have a compile method, returning a (sql, [params]) tuple. Calling compiler(value) will return a quoted value.
  • connection: the database connection used for the current query.
Return: (sql, params)
Where sql is a string containing ordered sql parameters to be replaced with the elements of the list params.
def asc(self, **kwargs):

Undocumented

def desc(self, **kwargs):

Undocumented

def flatten(self):
Recursively yield this expression and all subexpressions, in depth-first order.
def get_db_converters(self, connection):

Undocumented

def get_lookup(self, lookup):

Undocumented

def get_source_fields(self):
Return the underlying field types used by this aggregate.
def get_transform(self, name):

Undocumented

def relabeled_clone(self, change_map):
def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False):

Provide the chance to do any preprocessing or validation before being added to the query.

Arguments:
  • query: the backend query implementation
  • allow_joins: boolean allowing or denying use of joins in this query
  • reuse: a set of reusable joins for multijoins
  • summarize: a terminal aggregate clause
  • for_save: whether this expression about to be used in a save or update

Return: an Expression to be added to the query.

def reverse_ordering(self):

Undocumented

def select_format(self, compiler, sql, params):
Custom format for select clauses. For example, EXISTS expressions need to be wrapped in CASE WHEN on Oracle.
_output_field_resolved_to_none: bool =

Undocumented

filterable: bool =

Undocumented

is_summary: bool =

Undocumented

@cached_property
_output_field_or_none =
Return the output field of this expression, or None if _resolve_output_field() didn't return an output type.
@property
conditional =
@cached_property
contains_column_references =

Undocumented

@cached_property
contains_over_clause =

Undocumented

@cached_property
convert_value =
Expressions provide their own converters because users have the option of manually specifying the output_field which may be a different type from the one the database returns.
@property
field =

Undocumented