def get(self, key): """Objekt mit <key> wiederherstellen.""" archived = DeletedObject.get(key) if archived.dblayer == 'ndb': entity = ndb.ModelAdapter().pb_to_entity(entity_pb.EntityProto(archived.data)) else: # precondition: model class must be imported entity = db.model_from_protobuf(entity_pb.EntityProto(archived.data)) entity.put() archived.delete() self.add_message( 'success', u'Objekt <strong><A href="/admin/%s/%s/%s/">%s</a></strong> wurde wieder hergestellt.' % ( get_app_name(entity.__class__), entity.__class__.__name__, entity.key(), entity)) raise gaetk.handler.HTTP301_Moved(location='/admin/%s/%s/' % ( get_app_name(entity.__class__), entity.__class__.__name__))
def change_view(self, handler, object_id, extra_context=None): """View zum Bearbeiten eines vorhandenen Objekts""" obj = self.get_object(object_id) if obj is None: raise gaetk.handler.HTTP404_NotFound model_class = type(obj) form_class = self.get_form() if handler.request.get('delete') == 'yesiwant': # Der User hat gebeten, dieses Objekt zu löschen. key = compat.xdb_key(obj) data = compat.xdb_to_protobuf(obj) dblayer = 'ndb' if compat.xdb_is_ndb(obj) else 'db' archived = DeletedObject(key_name=str(key), model_class=model_class.__name__, old_key=str(key), dblayer=dblayer, data=data) archived.put() # Indexierung für Admin-Volltextsuche from gaetk.admin.search import remove_from_index if compat.xdb_is_ndb(obj): obj.key.delete() deferred.defer(remove_from_index, obj.key) else: obj.delete() deferred.defer(remove_from_index, obj.key()) handler.add_message( 'warning', u'<strong>{} {}</strong> wurde gelöscht. <a href="{}">Objekt wiederherstellen!</a>' .format(compat.xdb_kind(self.model), compat.xdb_id_or_name(key), archived.undelete_url())) raise gaetk.handler.HTTP302_Found( location='/admin/%s/%s/' % (util.get_app_name(model_class), compat.xdb_kind(model_class))) # Wenn das Formular abgeschickt wurde und gültig ist, # speichere das veränderte Objekt und leite auf die Übersichtsseite um. if handler.request.method == 'POST': form = form_class(handler.request.POST) if form.validate(): key_name = compat.xdb_id_or_name(compat.xdb_key(obj)) self.handle_blobstore_fields(handler, obj, key_name) if hasattr(obj, 'update'): obj.update(form.data) else: form.populate_obj(obj) key = obj.put() handler.add_message( 'success', u'<strong><a href="/admin/{}/{}/{}/">{} {}</a></strong> wurde gespeichert.' .format(util.get_app_name(self.model), compat.xdb_kind(self.model), compat.xdb_str_key(key), compat.xdb_kind(self.model), compat.xdb_id_or_name(key))) # Indexierung für Admin-Volltextsuche from gaetk.admin.search import add_to_index deferred.defer(add_to_index, key) raise gaetk.handler.HTTP302_Found( location='/admin/%s/%s/' % (util.get_app_name(model_class), compat.xdb_kind(model_class))) else: form = form_class(obj=obj) template_values = { 'object': obj, 'form': form, 'field_args': self.field_args, 'admin_class': self } if extra_context is not None: template_values.update(extra_context) handler.render(template_values, self.get_template('change'))
def change_view(self, handler, object_id, extra_context=None): """View zum Bearbeiten eines vorhandenen Objekts""" obj = self.get_object(object_id) if obj is None: raise gaetk.handler.HTTP404_NotFound model_class = type(obj) form_class = self.get_form() if handler.request.get('delete') == 'yesiwant': # Der User hat gebeten, dieses Objekt zu löschen. key = compat.xdb_key(obj) data = compat.xdb_to_protobuf(obj) dblayer = 'ndb' if compat.xdb_is_ndb(obj) else 'db' archived = DeletedObject(key_name=str(key), model_class=model_class.__name__, old_key=str(key), dblayer=dblayer, data=data) archived.put() # Indexierung für Admin-Volltextsuche from gaetk.admin.search import remove_from_index if compat.xdb_is_ndb(obj): obj.key.delete() deferred.defer(remove_from_index, obj.key) else: obj.delete() deferred.defer(remove_from_index, obj.key()) handler.add_message( 'warning', u'<strong>{} {}</strong> wurde gelöscht. <a href="{}">Objekt wiederherstellen!</a>'.format( compat.xdb_kind(self.model), compat.xdb_id_or_name(key), archived.undelete_url())) raise gaetk.handler.HTTP302_Found(location='/admin/%s/%s/' % ( util.get_app_name(model_class), compat.xdb_kind(model_class))) # Wenn das Formular abgeschickt wurde und gültig ist, # speichere das veränderte Objekt und leite auf die Übersichtsseite um. if handler.request.method == 'POST': form = form_class(handler.request.POST) if form.validate(): key_name = compat.xdb_id_or_name(compat.xdb_key(obj)) self.handle_blobstore_fields(handler, obj, key_name) if hasattr(obj, 'update'): obj.update(form.data) else: form.populate_obj(obj) key = obj.put() handler.add_message( 'success', u'<strong><a href="/admin/{}/{}/{}/">{} {}</a></strong> wurde gespeichert.'.format( util.get_app_name(self.model), compat.xdb_kind(self.model), compat.xdb_str_key(key), compat.xdb_kind(self.model), compat.xdb_id_or_name(key))) # Indexierung für Admin-Volltextsuche from gaetk.admin.search import add_to_index deferred.defer(add_to_index, key) raise gaetk.handler.HTTP302_Found(location='/admin/%s/%s/' % ( util.get_app_name(model_class), compat.xdb_kind(model_class))) else: form = form_class(obj=obj) template_values = {'object': obj, 'form': form, 'field_args': self.field_args, 'admin_class': self} if extra_context is not None: template_values.update(extra_context) handler.render(template_values, self.get_template('change'))