Python wtf AttributeError: ObjectIdField object does not have attribute 'help_text'

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) # Register the urls measurements.add_url_rule('/', view_func=List.as_view('index')) measurements.add_url_rule('/create/', defaults={'creator': None}, view_func=Detail.as_view('create')) measurements.add_url_rule('/<creator>/', view_func=Detail.as_view('edit')) 

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?

+1
python flask flask-wtforms mongoengine flask-mongoengine
source share
2 answers

Edit:

According to comment # 2 by Jérôme, the current version (0.7.5 at the time of editing) of the Mongogin flag (and mongoengine 0.10.5) works right out of the box. Tested and verified.

I am doing the same tutorial and also came across this error.

I added help_text="Your helptext here." to the fields (this is StringFields) in models.py, and this solved the problem, but your error points to ObjectIdField, which makes it a lot more cryptic.

So this is not very useful, but perhaps it will inspire you in the right direction.

Edit:

I struggled with this for some time, and it turned out that there were changes in mongoengine that broke flask_mongoengine. This commit in flask_mongoengine, in turn, fixes this.

As for real solutions, the previous version of mongoengine (0.10.1) worked for me. So:

 $ pip uninstall mongoengine $ pip install mongoengine==0.10.1 
+5
source share

The current version of Flask-MongoEngine 0.7.5 fixes this problem.

It removes the obsolete MongoEngine help_text and safe attributes.

Upgrade an existing version of Flask-MongoEngine with pip install --upgrade flask-mongoengine .

+1
source share

All Articles