def create_object(self, instance): obj = idict() for field in ["method", "xml", "doc_pk", "error"]: obj[field] = getattr(instance, field) return obj
def __init__(self, arg, initial=False): """ Takes a model, form or dict. For a model or form it assumes that you are trying to create a document from the values For a dict it assumes that you received results from Solr and you want to make a Python object representation of the model """ self.fields = deepcopy(self.base_fields) self.pk_field = None self._instance = None self.orginal_dict = {} self.data_dict = {} self.highlight = "" self.boost = "" self._transformed = False #Model if isinstance(arg, Model): self._instance = arg self.data_dict = model_to_dict(arg) #Form elif isinstance(arg, BaseForm): if not arg.is_valid(): raise AttributeError("Form is not valid %s" % ["%s:%s" % (key, "".join(value)) for key, value in arg.errors] ) if not arg.cleaned_data.has_key("id"): raise AttributeError("Solango requires that all forms have"+ \ " an id field. subclass forms.BaseSolangoForm") #We need a primary key. This seems to to the trick instance = idict(arg.cleaned_data) instance.model = get_instance_key(arg) self._instance = instance self.data_dict = arg.cleaned_data elif initial: self._instance = idict(arg) self.data_dict = arg #Dictionary elif isinstance(arg, dict): self.data_dict = arg #Error else: raise ValueError('Argument must be a Model, Form or a Dictionary') # Find Primary Key Field for field in self.fields.values(): #Save value if isinstance(field, search_fields.PrimaryKeyField): self.pk_field = field if self._instance and not hasattr(self._instance, "pk"): pk = getattr(self._instance,field.name) setattr(self._instance, "pk", pk) break if not self.pk_field: raise NoPrimaryKeyFieldException('Search Document needs a Primary Key Field') if self._instance: self._transform_field(self.pk_field) self.boost = self.get_boost(self._instance) elif self.data_dict: self.clean() self._transformed = True #Set Up the render Methods. for key, template in self.templates: setattr(self, "render_%s" % key, curry(self._render_doc_as, template=template))
def create_object(self, instance): return idict()