Based on this tutorial, I am trying to create a form to get several dimensions. It seems that the part for displaying the data works, but when using the model_form to generate the input form, it breaks with this error:
File "/myproject/lib/python3.4/site-packages/flask_mongoengine/wtf/orm.py", line 49, in the envelope 'description': field.help_text or '',
AttributeError: ObjectIdField does not have the help_text attribute
The error in this line of my code is:
form_cls = model_form(Measurement, exclude=('id', 'created_at', 'comments'))
This is my view.py code:
from flask import Blueprint, request, redirect, render_template, url_for from flask.views import MethodView from flask.ext.mongoengine.wtf import model_form from pyReefLog.models import Measurement measurements = Blueprint('measurements', __name__, template_folder='templates') class List(MethodView): cls = Measurement def get(self): measurements = self.cls.objects.all() return render_template('measurements/list.html', measurements=measurements) class Detail(MethodView): def get_context(self, creator=None): form_cls = model_form(Measurement, exclude=('id', 'created_at', 'comments')) if creator: measurement = Measurement.objects.get_or_404(creator=creator) if request.method == 'POST': form = form_cls(request.form, inital=measurement._data) else: form = form_cls(obj=measurement) else: measurement = Measurement() form = form_cls(request.form) context = { "measurement": measurement, "form": form, "create": creator is None } return context def get(self, creator): context = self.get_context(creator) return render_template('measurements/detail.html', **context) def post(self, creator): context = self.get_context(creator) form = context.get('form') if form.validate(): post = context.get('post') form.populate_obj(post) post.save() return redirect(url_for('measurements.index')) return render_template('measurements/detail.html', **context)
And these are my models.py:
import datetime from flask import url_for from pyReefLog import db class Comment(db.EmbeddedDocument): created_at = db.DateTimeField(default=datetime.datetime.now, required=True) body = db.StringField(verbose_name="Comment", required=True) author = db.StringField(verbose_name="Name", max_length=255, required=True) class Measurement(db.Document): created_at = db.DateTimeField(default=datetime.datetime.now, required=True) measured_at = db.DateTimeField(default=datetime.datetime.now, required=True) alkalinity = db.DecimalField(default=0.0, precision=2) calcium = db.DecimalField(default=0.0, precision=2) magnesium = db.DecimalField(default=0.0, precision=2) ph = db.DecimalField(default=0.0, precision=2) phosphate = db.DecimalField(default=0.0, precision=2) salinity = db.DecimalField(default=0.0, precision=2) temperature = db.DecimalField(default=0.0, precision=2) creator = db.StringField(required=True, max_length=255) comments = db.ListField(db.EmbeddedDocumentField('Comment')) def get_absolute_url(self): return url_for('measurement', kwargs={"creator": self.creator}) def __unicode__(self): return self.creator meta = { 'allow_inheritance': True, 'indexes': ['-created_at', '-measured_at', 'creator'], 'ordering': ['-measured_at'] }
None of the wtForms manual mentions anything related to the help_text attribute. Can anyone understand what is wrong there?