flask-admin обрабатывает запрос правильно

как я могу обработать запрос из шаблона списка. если я нажму кнопку отправки в моем custom_list.html, переменные не будут выводиться в виде строки. что я сделал не так ?

введите здесь описание изображения

app.py

from flask import Flask
import flask_admin as admin
from flask_mongoengine import MongoEngine
from flask_admin.contrib.mongoengine import ModelView
from flask_admin.actions import action

# Create application
app = Flask(__name__)

# Create dummy secrey key so we can use sessions
app.config['SECRET_KEY'] = '123456790'
app.config['MONGODB_SETTINGS'] = {'DB': 'test_app'}

# Create models
db = MongoEngine()
db.init_app(app)


class Website(db.Document):
    domain_name = db.StringField(max_length=200)
    title = db.StringField(max_length=160)
    meta_desc = db.StringField()


class WebsiteView(ModelView):

    list_template = 'custom_list.html'

    @action('create_meta', 'Create Meta', 'Are you sure you want to create meta data?')
    def action_createmeta(self, ids):

        print "this is my domain_name {} and this is my title {}".format(
            Website.domain_name, Website.title)


# Flask views
@app.route('/')
def index():
    return '<a href="/admin/">Click me to get to Admin!</a>'


if __name__ == '__main__':
    # Create admin
    admin = admin.Admin(app, 'Example: MongoEngine')

    # Add views
    admin.add_view(WebsiteView(Website))

    # Start app
    app.run(debug=True)

шаблоны/custom_list.html

{% extends 'admin/model/list.html' %} 
{% block body %} 
    <h1>Custom List View</h1> 
    {{ super() }} 
{% endblock %}

{% block list_row_actions %} 
    {{ super() }} 

  <form class="icon" method="POST" action="/admin/website/action/">
    <input id="action" name="action" value="create_meta" type="hidden">
    <input name="rowid" value="{{ get_pk_value(row) }}" type="hidden">
    <button onclick="return confirm('Are you sure you want to create meta data?');" title="Create Meta">
      <span class="fa fa-ok icon-ok"></span>
    </button>
  </form>
{% endblock %}

выход

введите здесь описание изображения


person mthecreator    schedule 04.03.2016    source источник


Ответы (1)


Вы печатаете определения Website.domain_name, а не значения.

Из документации и пример, который вам нужно сделать:

for id in ids:
    found_object = Website.objects.get(id=id)
    print "this is my domain_name {} and this is my title {}".format(
          found_object.domain_name, found_object.title)

РЕДАКТИРОВАТЬ: оригинальный пост.

Изменить строку

print "this is my domain_name {} and this is my title {}".format(
        Website.domain_name, Website.title)

to

print "this is my domain_name {} and this is my title {}".format(
        Website.domain_name.data, Website.title.data)

Вы печатаете объекты, а не опубликованные данные, содержащиеся в них

person Jase Rieger    schedule 04.03.2016
comment
при этом я получаю сообщение об ошибке: AttributeError: объект 'StringField' не имеет атрибута 'данные' - person mthecreator; 04.03.2016
comment
Попробуйте изменить Website.domain_name и т. д. на self.domain_name. Таким образом, вы используете инстанцированные объекты классов WebsiteView, которые наследуются от Website. Я верю, что это то место, где находятся ваши опубликованные данные. - person Jase Rieger; 04.03.2016
comment
пробовали это раньше. получить еще одну ошибку: AttributeError: объект «WebsiteView» не имеет атрибута «domain_name». когда я помещаю .data позади, я получаю ту же ошибку - person mthecreator; 04.03.2016
comment
Что, если вы напечатаете ids Я полагаю, что это будет элемент, который вы создали, и вам нужно вызвать выборку из базы данных, чтобы отобразить элементы - person Jase Rieger; 04.03.2016
comment
yes print ids выводит ObjectID. Подскажите, пожалуйста, как получить данные с атрибутом ids. - person mthecreator; 04.03.2016
comment
Из документации и пример Website.objects.get(id) - person Jase Rieger; 04.03.2016
comment
это вызывает еще одну ошибку: nvalidQueryError: не объект запроса: ‹встроенный идентификатор функции›. Вы намеревались использовать ключ = значение? - person mthecreator; 04.03.2016
comment
Я также следую примерам в вашей ссылке. Website.objects.get(id=ids) выдает эту ошибку: ValidationError: u[u'56d4dd0067b3db65269d6d33'] не является допустимым ObjectId, это должен быть 12-байтовый ввод или 24-символьная шестнадцатеричная строка. Website.objects(pk=ids) выдает ту же ошибку - person mthecreator; 04.03.2016
comment
ID - это список. Вам нужно сделать цикл for, чтобы перебрать их - person Jase Rieger; 04.03.2016
comment
наконец-то это работает, спасибо за ваше время и эксплантацию. Я был так смущен этим. уже прочитал документацию и попробовал много комбинаций, но я не могу заставить ее работать. ваш ответ правильный. Большое спасибо за это - person mthecreator; 05.03.2016