В настоящее время я программирую веб-приложение Flask с Python 3.6, используя flask -sqlalchemy и wtforms для университета. Речь идет о веб-сайте для усыновления животных зоопарка. Для этого я хочу иметь три поля QuerySelectField в моем FlaskForm: одно для выбора зоопарка, одно для выбора вида и одно для животных, принадлежащих к выбранному виду и живущих в выбранном зоопарке. Я изо всех сил пытаюсь получить третий динамический c QuerySelectField. Мои модели выглядят следующим образом:
class Zoo(db.Model):
__tablename__= "ZOO"
ZooID = db.Column(db.Integer, primary_key = True) #serial
Zname = db.Column(db.String (50), nullable = False)
...
class Animal(db.Model):
__tablename__= "ANIMAL"
AnimalID = db.Column(db.Integer, primary_key = True) #serial
SpeciesID = db.Column(db.Integer, db.ForeignKey('SPECIES.SpeciesID'), nullable = False)
Aname = db.Column(db.String (40), nullable = False)
ZooID = db.Column(db.Integer, db.ForeignKey('ZOO.ZooID'), nullable = False)
...
class Species(db.Model):
__tablename__= "SPECIES"
SpeciesID = db.Column(db.Integer, unique = True, primary_key = True) #serial
Sname = db.Column(db.String (20), unique = True, nullable = False)
...
Мой файл forms.py выглядит так (очевидно, он # еще не работает, просто чтобы понять, что я хочу):
class SelectForm(FlaskForm):
zoo = QuerySelectField(query_factory=zoo_query,allow_blank=True, get_label='Zname', blank_text="Click to select",validators = [DataRequired()])
species = QuerySelectField(query_factory=species_query,allow_blank=True, get_label='Sname', blank_text="Click to select",validators = [DataRequired()])
zooID= Zoo.query.filter_by(Zname = zoo).first().ZooID
speciesID= Species.query.filter_by(Sname = species).first().SpeciesID
animals = QuerySelectField(query_factory=animal_query(zooID,speciesID),allow_blank=True, get_label='Zname', blank_text="Click to select",validators = [DataRequired()])
Соответствующая часть в моем. html:
<label for="zoo">
Your future <span class="highlight-home">zoo</span> to support:
</label>
{{ form.csrf_token }}
{{ form.zoo }}
<ul>
{% for error in form.zoo.errors %}
<li style="color:red;">{{ error }}</li>
{% endfor %}
</ul>
</div>
<div class="form-group">
<label for="animal-type">
Your future <span class="highlight-home">species</span> to support:
</label>
{{ form.csrf_token }}
{{ form.species }}
<ul>
{% for error in form.species.errors %}
<li style="color:red;">{{ error }}</li>
{% endfor %}
</ul>
</div>
<div class="form-group">
<label for="animal" class="">
Your futue <span class="highlight-home">buddy</span> to support:
</label>
{{ form.csrf_token }}
{{ form.animals }}
<ul>
{% for error in form.animals.errors %}
<li style="color:red;">{{ error }}</li>
{% endfor %}
</ul>
</div>
Заранее спасибо.