Hy Дружный, Я реализующая проект Колба/MongoDB и так как я новичок в этом мире, я следовал учебник на этой странице: http://docs.mongodb.org/ecosystem/tutorial/write-a-tumblelog-application-with-flask-mongoengine/Mongoengine, колб и ReferenceField в WTForms
После этого , я начал кодировать свое собственное приложение, и это часть кода:
МОДЕЛИ:
class Generic(db.Document):
descrizione = db.StringField(max_length=255, required=True)
meta = {
'allow_inheritance': True,
'indexes': [
{'fields': ['descrizione'], 'unique': True}
]
}
class Category(Generic):
def __call__(self, *args):
pass
class User(db.Document):
email = db.EmailField(max_length=255, required=True)
nickname = db.StringField(max_length=255, required=True)
password = db.StringField(max_length=16, required=True)
categoria = db.ReferenceField('Category', required=True)
meta = {
'indexes': [
{'fields': ['nickname', 'email'], 'unique': True}
]
}
Как вы можете видеть выше, у меня есть класс «Категория», который наследует «Generic " класс. Класс «Пользователь», наконец, имеет свойство ReferenceField для категории. Таким образом, когда я создаю пользователя, поле категории на mongo db хранится как ObjectID, относящееся к «общей» коллекции, в которой есть все категории, которые я создал.
Следующий шаг - создать форму для вставки новых документов в коллекцию пользователей. В моем файле Просмотров питона Я это Cose:
def iscrizione():
form = model_form(User, only=['email', 'nickname', 'password', 'categoria'])(request.form)
if request.method == 'GET':
ctx = {
'form': form
}
return render_template('users/iscrizione.html', **ctx)
Шаблон использует макрос дзиндзя сообщается на странице учебника:
{% macro render(form) -%}
<fieldset>
{% for field in form %}
{% if field.type in ['CSRFTokenField', 'HiddenField'] %}
{{ field() }}
{% else %}
<div class="clearfix {% if field.errors %}error{% endif %}">
{{ field.label }}
<div class="input">
{% if field.name == "body" %}
{{ field(rows=10, cols=40) }}
{% else %}
{{ field() }}
{% endif %}
{% if field.errors or field.help_text %}
<span class="help-inline">
{% if field.errors %}
{{ field.errors|join(' ') }}
{% else %}
{{ field.help_text }}
{% endif %}
</span>
{% endif %}
</div>
</div>
{% endif %}
{% endfor %}
</fieldset>
{% endmacro %}
И, наконец, это моя проблема (если вы достигли этого текста, вы мой герой)
Когда я посещаю веб-страницу с визуализированной формой, макрос правильно показывает текстовые поля, а для ссылочного поля в моей модели он показывает ac ombo box. Значения параметров в комманде select прекрасно совпадают с идентификатором объекта документов категории, которые я создал. Выбрав один из них и отправив форму, мое приложение правильно создает новый пользовательский документ.
К сожалению, ярлыки выбора окна не отображают значение для чтения человеком, сообщая «Объект категории».
<select id="categoria" name="categoria">
<option value="530536363c74031c24ee7ab6">Category object</option>
<option value="5305362d3c74031c24ee7ab5">Category object</option>
<option value="530535793c74031b73dd07b4">Category object</option>
</select>
Как я могу показать правильную метку для поля выбора?