SQLAlchemy / WTForms: используйте выбранное значение из QuerySelectField, чтобы установить значения в другом QuerySelectField в одном FlaskForm. - PullRequest
0 голосов
/ 21 июня 2020

В настоящее время я программирую веб-приложение 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>

Заранее спасибо.

...