def _handle_object(self, node): """ Convert an <object> node to a DeserializedObject. """ # Look up the model using the model loading mechanism. If this fails, # bail. Model = self._get_model_from_node(node, "model") # Start building a data dictionary from the object. If the node is # missing the pk attribute, fail. pk = node.getAttribute("pk") if not pk: raise base.DeserializationError("<object> node is missing the 'pk' attribute") data = {Model._meta.pk.attname: Model._meta.pk.to_python(pk)} # Also start building a dict of m2m data (this is saved as # {m2m_accessor_attribute : [list_of_related_objects]}) m2m_data = {} # Deseralize each field. for field_node in node.getElementsByTagName("field"): # If the field is missing the name attribute, bail (are you # sensing a pattern here?) field_name = field_node.getAttribute("name") if not field_name: raise base.DeserializationError("<field> node is missing the 'name' attribute") # Get the field from the Model. This will raise a # FieldDoesNotExist if, well, the field doesn't exist, which will # be propagated correctly. try: field = Model._meta.get_field(field_name) except FieldDoesNotExist, e: try: language = get_field_language(field_name) except: raise e else: lang_codes = [l[0] for l in settings.LANGUAGES] if language not in lang_codes: # fails silently because the LANGUAGES in these settings # are not same as fixtures data continue else: raise e # As is usually the case, relation fields get the special treatment. if field.rel and isinstance(field.rel, models.ManyToManyRel): m2m_data[field.name] = self._handle_m2m_field_node(field_node, field) elif field.rel and isinstance(field.rel, models.ManyToOneRel): data[field.attname] = self._handle_fk_field_node(field_node, field) else: if field_node.getElementsByTagName('None'): value = None else: value = field.to_python(xml_serializer.getInnerText(field_node).strip()) data[field.name] = value
def add_south_trans_fields(frozen_models, trans_data): for model, field_data in trans_data.items(): for field_name, field_desc in field_data.items(): for real_field in get_real_fieldname_in_each_language(field_name): field_lang = get_field_language(real_field) real_field_desc = deepcopy(field_desc) if field_lang != fallback_language(): real_field_desc[2].update({'null': 'True', 'blank': 'True'}) frozen_models[model][real_field] = real_field_desc
def add_south_trans_fields(frozen_models, trans_data): for model, field_data in trans_data.items(): for field_name, field_desc in field_data.items(): for real_field in get_real_fieldname_in_each_language(field_name): field_lang = get_field_language(real_field) real_field_desc = deepcopy(field_desc) if field_lang != fallback_language(): real_field_desc[2].update({ 'null': 'True', 'blank': 'True' }) frozen_models[model][real_field] = real_field_desc
def _handle_object(self, node): """ Convert an <object> node to a DeserializedObject. """ # Look up the model using the model loading mechanism. If this fails, # bail. Model = self._get_model_from_node(node, "model") # Start building a data dictionary from the object. If the node is # missing the pk attribute, fail. pk = node.getAttribute("pk") if not pk: raise base.DeserializationError( "<object> node is missing the 'pk' attribute") data = {Model._meta.pk.attname: Model._meta.pk.to_python(pk)} # Also start building a dict of m2m data (this is saved as # {m2m_accessor_attribute : [list_of_related_objects]}) m2m_data = {} # Deseralize each field. for field_node in node.getElementsByTagName("field"): # If the field is missing the name attribute, bail (are you # sensing a pattern here?) field_name = field_node.getAttribute("name") if not field_name: raise base.DeserializationError( "<field> node is missing the 'name' attribute") # Get the field from the Model. This will raise a # FieldDoesNotExist if, well, the field doesn't exist, which will # be propagated correctly. try: field = Model._meta.get_field(field_name) except FieldDoesNotExist, e: try: language = get_field_language(field_name) except: raise e else: lang_codes = [l[0] for l in settings.LANGUAGES] if language not in lang_codes: # fails silently because the LANGUAGES in these settings # are not same as fixtures data continue else: raise e # As is usually the case, relation fields get the special treatment. if field.rel and isinstance(field.rel, models.ManyToManyRel): m2m_data[field.name] = self._handle_m2m_field_node( field_node, field) elif field.rel and isinstance(field.rel, models.ManyToOneRel): data[field.attname] = self._handle_fk_field_node( field_node, field) else: if field_node.getElementsByTagName('None'): value = None else: value = field.to_python( xml_serializer.getInnerText(field_node).strip()) data[field.name] = value