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',
                                     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)