def add(model_name): """Create a new instance of a model.""" if not model_name in datastore.list_model_names(): return "%s cannot be accessed through this admin page" % ( model_name) model_class = datastore.get_model_class(model_name) model_form = datastore.get_model_form(model_name) model_instance = model_class() if request.method == 'GET': form = model_form() form._has_file_field = has_file_field(form) return render_template( 'admin/add.html', model_names=datastore.list_model_names(), model_name=model_name, form=form) elif request.method == 'POST': form = model_form(request.form) form._has_file_field = has_file_field(form) if form.validate(): model_instance = datastore.update_from_form( model_instance, form) datastore.save_model(model_instance) flash('%s added: %s' % (model_name, model_instance), 'success') return redirect(url_for('.list_view', model_name=model_name)) else: flash('There was an error processing your form. This ' '%s has not been saved.' % model_name, 'error') return render_template( 'admin/add.html', model_names=datastore.list_model_names(), model_name=model_name, form=form)
def edit(model_name, model_url_key): """Edit a particular instance of a model.""" model_keys = [key if key != empty_sequence else u'' for key in model_url_key.split('/')] if not model_name in datastore.list_model_names(): return "%s cannot be accessed through this admin page" % ( model_name,) model_form = datastore.get_model_form(model_name) model_instance = datastore.find_model_instance( model_name, model_keys) if not model_instance: return "%s not found: %s" % (model_name, model_key) if request.method == 'GET': form = model_form(obj=model_instance) form._has_file_field = has_file_field(form) return render_template( 'admin/edit.html', model_names=datastore.list_model_names(), model_instance=model_instance, model_name=model_name, form=form) elif request.method == 'POST': form = model_form(request.form, obj=model_instance) form._has_file_field = has_file_field(form) if form.validate(): model_instance = datastore.update_from_form( model_instance, form) datastore.save_model(model_instance) flash('%s updated: %s' % (model_name, model_instance), 'success') return redirect( url_for('.list', model_name=model_name)) else: flash('There was an error processing your form. ' 'This %s has not been saved.' % model_name, 'error') return render_template( 'admin/edit.html', model_names=datastore.list_model_names(), model_instance=model_instance, model_name=model_name, form=form)