(self, meta, exclude=None)
| 1385 | return getattr(self, cachename) |
| 1386 | |
| 1387 | def _get_field_expression_map(self, meta, exclude=None): |
| 1388 | if exclude is None: |
| 1389 | exclude = set() |
| 1390 | meta = meta or self._meta |
| 1391 | field_map = {} |
| 1392 | generated_fields = [] |
| 1393 | for field in meta.local_fields: |
| 1394 | if field.name in exclude: |
| 1395 | continue |
| 1396 | if field.generated: |
| 1397 | if any( |
| 1398 | ref[0] in exclude |
| 1399 | for ref in self._get_expr_references(field.expression) |
| 1400 | ): |
| 1401 | continue |
| 1402 | generated_fields.append(field) |
| 1403 | continue |
| 1404 | if ( |
| 1405 | isinstance(field.remote_field, ForeignObjectRel) |
| 1406 | and field not in meta.local_concrete_fields |
| 1407 | ): |
| 1408 | value = tuple( |
| 1409 | getattr(self, from_field) for from_field in field.from_fields |
| 1410 | ) |
| 1411 | if len(value) == 1: |
| 1412 | value = value[0] |
| 1413 | elif field.concrete: |
| 1414 | value = getattr(self, field.attname) |
| 1415 | else: |
| 1416 | continue |
| 1417 | if not value or not hasattr(value, "resolve_expression"): |
| 1418 | value = Value(value, field) |
| 1419 | field_map[field.name] = value |
| 1420 | field_map[field.attname] = value |
| 1421 | if "pk" not in exclude: |
| 1422 | field_map["pk"] = Value(self.pk, meta.pk) |
| 1423 | if generated_fields: |
| 1424 | replacements = {F(name): value for name, value in field_map.items()} |
| 1425 | for generated_field in generated_fields: |
| 1426 | field_map[generated_field.name] = ExpressionWrapper( |
| 1427 | generated_field.expression.replace_expressions(replacements), |
| 1428 | generated_field.output_field, |
| 1429 | ) |
| 1430 | |
| 1431 | return field_map |
| 1432 | |
| 1433 | def prepare_database_save(self, field): |
| 1434 | if not self._is_pk_set(): |
no test coverage detected