(field, field_value, using, handle_forward_references)
| 355 | |
| 356 | |
| 357 | def 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 | |
| 392 | def deserialize_fk_value(field, field_value, using, handle_forward_references): |
no test coverage detected