MCPcopy
hub / github.com/django/django / deserialize_m2m_values

Function deserialize_m2m_values

django/core/serializers/base.py:357–389  ·  view source on GitHub ↗
(field, field_value, using, handle_forward_references)

Source from the content-addressed store, hash-verified

355
356
357def deserialize_m2m_values(field, field_value, using, handle_forward_references):
358 model = field.remote_field.model
359 if hasattr(model._default_manager, "get_by_natural_key"):
360
361 def m2m_convert(value):
362 if hasattr(value, "__iter__") and not isinstance(value, str):
363 return (
364 model._default_manager.db_manager(using)
365 .get_by_natural_key(*value)
366 .pk
367 )
368 else:
369 return model._meta.pk.to_python(value)
370
371 else:
372
373 def m2m_convert(v):
374 return model._meta.pk.to_python(v)
375
376 try:
377 pks_iter = iter(field_value)
378 except TypeError as e:
379 raise M2MDeserializationError(e, field_value)
380 try:
381 values = []
382 for pk in pks_iter:
383 values.append(m2m_convert(pk))
384 return values
385 except Exception as e:
386 if isinstance(e, ObjectDoesNotExist) and handle_forward_references:
387 return DEFER_FIELD
388 else:
389 raise M2MDeserializationError(e, pk)
390
391
392def deserialize_fk_value(field, field_value, using, handle_forward_references):

Callers 1

save_deferred_fieldsMethod · 0.85

Calls 3

m2m_convertFunction · 0.85
appendMethod · 0.45

Tested by

no test coverage detected