def get_dict(self, url=False, ref_urls=False, history=False): """ Return the fields and their contents as a dict. If url=True, add own absolute url, if ref_urls=True, add urls for any referencefields present. """ fieldnames = (field.name for field in self._meta.fields) items = ((field,getattr(self, field)) for field in fieldnames) result = {} for k, v in items: if isinstance(v, models.Model): # Replace object by representation result.update({k: str(v)}) if ref_urls: result.update({k + '_url': v.get_absolute_url()}) else: result.update({k: v}) if history: result.update(get_simple_history(self)) # Since only modified is displayed, so do if result['datetime_modified'] is None: result['datetime_modified'] = result['datetime_created'] if result['modified_by'] is None: result['modified_by'] = result['created_by'] return result
def get_object_for_api(self, worksp, flat=True, size=BaseApiView.COMPLETE, include_geom=False): """ create object of workspace """ # You get a dict with keys datetime_modified, modified_by, # created_by, datetime_created history = get_simple_history(worksp) # Fields are read-only if the object is not yours read_only = ((self.request.user != worksp.owner) and not self.request.user.is_superuser) #read_only = not(worksp.owner_type == self.model_class.OWNER_TYPE_USER) if size == self.ID_NAME: output = { 'id': worksp.id, 'name': worksp.name, } elif size == self.MEDIUM or size == self.SMALL: output = { 'id': worksp.id, 'name': worksp.name, 'personal_category': worksp.personal_category, 'category': self._get_related_object( worksp.category, flat ), 'data_set': self._get_related_object( worksp.data_set, flat ), 'owner': self._get_related_object( worksp.owner, flat ), 'owner_type': self._get_choice( worksp.owner_type, flat ), 'read_only': read_only, 'datetime_modified': history['datetime_modified'], 'datetime_created': history['datetime_created'], } elif size == self.COMPLETE: output = { 'id': worksp.id, 'name': worksp.name, 'personal_category': worksp.personal_category, 'category': self._get_related_object( worksp.category, flat ), 'data_set': self._get_related_object( worksp.data_set, flat ), 'owner': self._get_related_object( worksp.owner, flat ), 'owner_type': self._get_choice( self.model_class._meta.get_field('owner_type'), worksp.owner_type, flat ), 'read_only': read_only, 'layers': worksp.get_workspace_layers(), 'datetime_modified': history['datetime_modified'], 'datetime_created': history['datetime_created'], } # Only for collages, the collage view uses the same class. if 'secret_slug' in worksp.__dict__: output['secret_slug'] = worksp.secret_slug if 'is_temp' in worksp.__dict__: output['is_temp'] = worksp.is_temp return output