Я прошел через различные учебники + поиск в Stackoverflow/Google, но не смог найти ответы на вопрос о том, как использовать QuerySelectField, используя несколько чертежей Flask, возможно, вы могли бы помочь. В принципе, я определил класс проекта и класс клиента в моем models.py следующим образом:управлять QuerySelectField по чертежам флажков
class Project(db.Model):
__tablename__ = 'projects'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(128), nullable=False)
description = db.Column(db.Text)
client_id = db.Column(db.Integer, db.ForeignKey('clients.id'))
class Client(db.Model):
__tablename__ = 'clients'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128), nullable=False)
location = db.Column(db.Text, nullable=False)
projects = db.relationship('Project', lazy='dynamic', backref='project')
Я тогда план для каждой части, один управлять своими проектами, еще один для моих клиентов. я тогда застревают, когда я пытаюсь использовать QuerySelectField, чтобы получить имена клиентов в моей форме проектов, вот то, что я до сих пор в своих проектах/forms.py:
from flask.ext.wtf import Form
from wtforms import StringField, TextAreaField, SubmitField
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from wtforms.validators import Length, Required
from wtforms.fields.html5 import DateField
class ProjectForm(Form):
title = StringField('Title', validators=[Required(), Length(1, 128)])
description = TextAreaField('Desciption')
date = DateField('Date', format='%d/%m/%Y')
client_id = QuerySelectField('Select Client', validators=[Required()], coerce=int, choices = [(1, 'abc'), (2, 'defg'), (3, 'hij')])
submit = SubmitField('Submit')
def from_model(self, project):
self.title.data = project.title
self.description.data = project.description
self.client_id.data = project.client_id
self.date.data = project.date
def to_model(self, project):
project.title = self.title.data
project.description = self.description.data
project.client_id = self.client_id.data
project.date = self.date.data
Я знаю, что эта версия не выбирая любого клиента, поскольку я передаю динамические динамические данные ввода-вывода, но, по крайней мере, он работает, и я могу видеть свой SelectField с возможными значениями. Я прочитал, я должен использовать что-то вроде
client_id = QuerySelectField('Select Client', query_factory=lambda: Client.query.all())
и был также рекомендуется сначала объявить что-то вроде следующего, прежде чем «класса ProjectForm (форма)»:
def client_id():
return Client.query.filter_by(enabled=True)
Во всех случаях, я в конечном итоге с NameError: имя «Клиент» не определено, я понимаю, что я должен сказать где-то, что программа должна смотреть на мой класс Client, но мне не удалось найти, где, если проблема не где-то в другом месте. Заранее благодарим за помощь.
Большое спасибо Мехди, я был в основном с отсутствующим «от формы импорта клиента», чтобы заставить ее работать. – cdcf
Добро пожаловать! –