MCPcopy
hub / github.com/django/django / get_normalized_value

Function get_normalized_value

django/db/models/fields/related_lookups.py:15–39  ·  view source on GitHub ↗
(value, lhs)

Source from the content-addressed store, hash-verified

13
14
15def get_normalized_value(value, lhs):
16 from django.db.models import Model
17
18 if isinstance(value, Model):
19 if not value._is_pk_set():
20 raise ValueError("Model instances passed to related filters must be saved.")
21 value_list = []
22 sources = composite.unnest(lhs.output_field.path_infos[-1].target_fields)
23 for source in sources:
24 while not isinstance(value, source.model) and source.remote_field:
25 source = source.remote_field.model._meta.get_field(
26 source.remote_field.field_name
27 )
28 try:
29 value_list.append(getattr(value, source.attname))
30 except AttributeError:
31 # A case like
32 # Restaurant.objects.filter(place=restaurant_instance), where
33 # place is a OneToOneField and the primary key of Restaurant.
34 pk = value.pk
35 return pk if isinstance(pk, tuple) else (pk,)
36 return tuple(value_list)
37 if not isinstance(value, tuple):
38 return (value,)
39 return value
40
41
42class RelatedIn(In):

Callers 4

get_prep_lookupMethod · 0.85
as_sqlMethod · 0.85
get_prep_lookupMethod · 0.85
as_sqlMethod · 0.85

Calls 3

_is_pk_setMethod · 0.80
get_fieldMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected