mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #23395 -- Limited line lengths to 119 characters.
This commit is contained in:
committed by
Tim Graham
parent
84b0a8d2aa
commit
b1e33ceced
@@ -124,14 +124,15 @@ def Deserializer(object_list, **options):
|
||||
|
||||
# Handle M2M relations
|
||||
if field.remote_field and isinstance(field.remote_field, models.ManyToManyRel):
|
||||
if hasattr(field.remote_field.model._default_manager, 'get_by_natural_key'):
|
||||
model = field.remote_field.model
|
||||
if hasattr(model._default_manager, 'get_by_natural_key'):
|
||||
def m2m_convert(value):
|
||||
if hasattr(value, '__iter__') and not isinstance(value, six.text_type):
|
||||
return field.remote_field.model._default_manager.db_manager(db).get_by_natural_key(*value).pk
|
||||
return model._default_manager.db_manager(db).get_by_natural_key(*value).pk
|
||||
else:
|
||||
return force_text(field.remote_field.model._meta.pk.to_python(value), strings_only=True)
|
||||
return force_text(model._meta.pk.to_python(value), strings_only=True)
|
||||
else:
|
||||
m2m_convert = lambda v: force_text(field.remote_field.model._meta.pk.to_python(v), strings_only=True)
|
||||
m2m_convert = lambda v: force_text(model._meta.pk.to_python(v), strings_only=True)
|
||||
|
||||
try:
|
||||
m2m_data[field.name] = []
|
||||
@@ -142,21 +143,24 @@ def Deserializer(object_list, **options):
|
||||
|
||||
# Handle FK fields
|
||||
elif field.remote_field and isinstance(field.remote_field, models.ManyToOneRel):
|
||||
model = field.remote_field.model
|
||||
if field_value is not None:
|
||||
try:
|
||||
if hasattr(field.remote_field.model._default_manager, 'get_by_natural_key'):
|
||||
default_manager = model._default_manager
|
||||
field_name = field.remote_field.field_name
|
||||
if hasattr(default_manager, 'get_by_natural_key'):
|
||||
if hasattr(field_value, '__iter__') and not isinstance(field_value, six.text_type):
|
||||
obj = field.remote_field.model._default_manager.db_manager(db).get_by_natural_key(*field_value)
|
||||
obj = default_manager.db_manager(db).get_by_natural_key(*field_value)
|
||||
value = getattr(obj, field.remote_field.field_name)
|
||||
# If this is a natural foreign key to an object that
|
||||
# has a FK/O2O as the foreign key, use the FK value
|
||||
if field.remote_field.model._meta.pk.remote_field:
|
||||
if model._meta.pk.remote_field:
|
||||
value = value.pk
|
||||
else:
|
||||
value = field.remote_field.model._meta.get_field(field.remote_field.field_name).to_python(field_value)
|
||||
value = model._meta.get_field(field_name).to_python(field_value)
|
||||
data[field.attname] = value
|
||||
else:
|
||||
data[field.attname] = field.remote_field.model._meta.get_field(field.remote_field.field_name).to_python(field_value)
|
||||
data[field.attname] = model._meta.get_field(field_name).to_python(field_value)
|
||||
except Exception as e:
|
||||
raise base.DeserializationError.WithData(e, d['model'], d.get('pk'), field_value)
|
||||
else:
|
||||
|
||||
@@ -236,12 +236,13 @@ class Deserializer(base.Deserializer):
|
||||
if node.getElementsByTagName('None'):
|
||||
return None
|
||||
else:
|
||||
if hasattr(field.remote_field.model._default_manager, 'get_by_natural_key'):
|
||||
model = field.remote_field.model
|
||||
if hasattr(model._default_manager, 'get_by_natural_key'):
|
||||
keys = node.getElementsByTagName('natural')
|
||||
if keys:
|
||||
# If there are 'natural' subelements, it must be a natural key
|
||||
field_value = [getInnerText(k).strip() for k in keys]
|
||||
obj = field.remote_field.model._default_manager.db_manager(self.db).get_by_natural_key(*field_value)
|
||||
obj = model._default_manager.db_manager(self.db).get_by_natural_key(*field_value)
|
||||
obj_pk = getattr(obj, field.remote_field.field_name)
|
||||
# If this is a natural foreign key to an object that
|
||||
# has a FK/O2O as the foreign key, use the FK value
|
||||
@@ -250,29 +251,31 @@ class Deserializer(base.Deserializer):
|
||||
else:
|
||||
# Otherwise, treat like a normal PK
|
||||
field_value = getInnerText(node).strip()
|
||||
obj_pk = field.remote_field.model._meta.get_field(field.remote_field.field_name).to_python(field_value)
|
||||
obj_pk = model._meta.get_field(field.remote_field.field_name).to_python(field_value)
|
||||
return obj_pk
|
||||
else:
|
||||
field_value = getInnerText(node).strip()
|
||||
return field.remote_field.model._meta.get_field(field.remote_field.field_name).to_python(field_value)
|
||||
return model._meta.get_field(field.remote_field.field_name).to_python(field_value)
|
||||
|
||||
def _handle_m2m_field_node(self, node, field):
|
||||
"""
|
||||
Handle a <field> node for a ManyToManyField.
|
||||
"""
|
||||
if hasattr(field.remote_field.model._default_manager, 'get_by_natural_key'):
|
||||
model = field.remote_field.model
|
||||
default_manager = model._default_manager
|
||||
if hasattr(default_manager, 'get_by_natural_key'):
|
||||
def m2m_convert(n):
|
||||
keys = n.getElementsByTagName('natural')
|
||||
if keys:
|
||||
# If there are 'natural' subelements, it must be a natural key
|
||||
field_value = [getInnerText(k).strip() for k in keys]
|
||||
obj_pk = field.remote_field.model._default_manager.db_manager(self.db).get_by_natural_key(*field_value).pk
|
||||
obj_pk = default_manager.db_manager(self.db).get_by_natural_key(*field_value).pk
|
||||
else:
|
||||
# Otherwise, treat like a normal PK value.
|
||||
obj_pk = field.remote_field.model._meta.pk.to_python(n.getAttribute('pk'))
|
||||
obj_pk = model._meta.pk.to_python(n.getAttribute('pk'))
|
||||
return obj_pk
|
||||
else:
|
||||
m2m_convert = lambda n: field.remote_field.model._meta.pk.to_python(n.getAttribute('pk'))
|
||||
m2m_convert = lambda n: model._meta.pk.to_python(n.getAttribute('pk'))
|
||||
return [m2m_convert(c) for c in node.getElementsByTagName("object")]
|
||||
|
||||
def _get_model_from_node(self, node, attr):
|
||||
|
||||
Reference in New Issue
Block a user