Hy alle, Ich bin ein Fläschchen/MongoDB Projekt zu realisieren, und da ich auf dieser Welt bin hier, ich habe das Tutorial auf dieser Seite eintragen: http://docs.mongodb.org/ecosystem/tutorial/write-a-tumblelog-application-with-flask-mongoengine/Mongoengine, Flasche und ReferenceField in WTForms
Danach
MODELLE:
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}
]
}
Wie Sie oben sehen können, habe ich eine „Kategorie“ Klasse, die die „Generic erbt, ich habe meine eigene Anwendung zu codieren, und dies ist Teil des Codes gestartet "Klasse. Die Klasse "Benutzer" verfügt schließlich über ein ReferenceField für die Kategorie. Auf diese Weise, wenn ich einen Benutzer erstelle, wird das Kategoriefeld auf Mongo Db als ObjectID gespeichert, bezogen auf die "generische" Sammlung, die alle Kategorien hat, die ich erstellt habe.
Der nächste Schritt besteht darin, das Formular zu erstellen, um neue Dokumente in die Benutzersammlung einzufügen. In meinen Ansichten Python-Datei habe ich diese 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)
Die Vorlage verwendet das Makro Jinja in der Tutorial-Seite berichtet:
{% 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 %}
Und schließlich, das ist mein Problem (If Sie haben diesen Text erreicht, Sie sind mein Held)
Wenn ich die Webseite mit dem gerenderten Formular besuche, zeigt das Makro korrekt die Textfelder an, und für das ReferenceField in meinem Modell zeigt es ac Ombo-Box. Die Optionswerte in der Auswahlkombination stimmen perfekt mit der Objekt-ID der von mir erstellten Kategoriedokumente überein. Wenn ich eines davon auswähle und das Formular abschicke, erstellt meine Anwendung das neue Benutzerdokument korrekt.
Leider zeigen die Auswahlfeldbeschriftungen keinen vom Menschen lesbaren Wert an und melden "Category object".
<select id="categoria" name="categoria">
<option value="530536363c74031c24ee7ab6">Category object</option>
<option value="5305362d3c74031c24ee7ab5">Category object</option>
<option value="530535793c74031b73dd07b4">Category object</option>
</select>
Wie kann ich ein korrektes Etikett für die Auswahlbox anzeigen?