【问题标题】:Flask-SQLAlchemy - get distinct elements in QuerySelectField?Flask-SQLAlchemy - 在 QuerySelectField 中获取不同的元素?
【发布时间】:2021-05-16 13:48:14
【问题描述】:

所以我正在从我的数据库中填充查询选择字段。

def place_query():
    
    return Place.query
    
class CreateItineraryForm(FlaskForm):

   opts = QuerySelectField('Select a city',query_factory=place_query,allow_blank=True,get_label='city',validators=[DataRequired()])

   days = IntegerField('Enter the number of days of stay',validators=[DataRequired()])

   submit = SubmitField("Generate Itinerary")

但由于我的数据库有多个具有同一个城市的元组。因此,在我的选择字段中,同一个城市多次出现。有没有办法只选择不同的城市名称?

如果有帮助,这就是架构 -

class Place(db.Model):

__tablename__ = 'places'

id = db.Column(db.Integer,primary_key=True)

name = db.Column(db.String(64),nullable=False,index=True)

lat = db.Column(db.Float,nullable=False)

long = db.Column(db.Float,nullable=False)

city = db.Column(db.String(30),nullable=False,index=True)

user_reviews = db.relationship('Review',backref='subject',lazy=True)

def __init__(self,name,lat,long,city):

self.name = name

self.lat = lat

self.long = long

self.city = city

感谢您的帮助!

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    所以诀窍是不要使用QuerySelectField,而是使用SelectField

    这是新代码 -

    # this returns a tuple of the form (city_name,)
    cities = db.session.query(Place.city).group_by(Place.city).order_by(Place.city).all()
    
    city_list = []
    
    # here we create a list from the tuple
    def create_list(cities):
        for city in cities:
            city_list.append(city[0])
    
        return city_list
    

    新的选择字段看起来像这样 -

    opts = SelectField('Select a city',validators=[DataRequired()],choices=create_list(cities))
    

    【讨论】:

    • 您可以使用distinct 获取相同的元组列表:cities = db.session.query(Place.city.distinct()).all()
    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2019-06-01
    • 2014-10-08
    • 2022-09-27
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多