首页 > 解决方案 > Flask App 中更改的数据在数据库中更新,但在运行时未在 App 中更新

问题描述

我有两张桌子: billtexts 和 zahlungsarten(付款方式)。每个 billtext 都有它自己的 zahlungsart(付款方式)。zahlungsarten 只是一个选择表 - 从中​​选择账单文本条目的 zahlungsarten。

通过添加新的账单文本(或修改一个),zahlungsart 条目可以在选择字段中选择。

我可以添加新的账单文本,一切正常。但是当我将一个新的 zahlungsart(或修改一个)添加到 zahlungsarten(选择表),然后返回到 billtext 表单并尝试添加/编辑一个 billtext 时,新的 zahlungsart 不会在运行时显示在 billtexts 的选择字段中(尽管它在数据库中!)。如果我重新启动应用程序,它会正确显示。

使用 Mixin 的函数生成 selection_values 没有区别......

不应该在运行时获取get_selection_values实际数据?

我是否必须在运行时更新某些内容才能为选择字段获取新的插入/修改数据?

class SelZahlungsart(db.Model, GetSelectionValuesMixin):
    __tablename__ = 'sel_zahlungsart'

    idsel_zahlungsart = db.Column(db.SmallInteger, primary_key=True, info='id of the zahlungsart')
    zahlungsart = db.Column(db.String(15), nullable=False, info='Bezeichnung der Zahlungsart')
class GetSelectionValuesMixin(object):

    @staticmethod
    def get_selection_values(q_object, q_field):
        """
        Returns selection values of given table and column as a list.
        :param q_object: the db.Model class
        :param q_field: the db.Model class field
        :return: all values from the given Model/field
        """
        result = [r.field for r in db.session.query(q_object).with_entities(q_field.label('field')).distinct()]
        #result = [r.field for r in q_object.query.with_entities(q_field.label('field')).distinct()]
        return result
class TBilltext(db.Model):
    __tablename__ = 't_billtexts'

    textid = db.Column(db.Integer, primary_key=True)
    ...
    zahlungsart = db.Column(db.String(15), nullable=False, unique=True, info='kind of payment')
class BilltextForm(FlaskForm):
    """
    Form for admin to add/edit billextra
    """
    ...
    zahlungsart = SelectField(choices=SelZahlungsart.get_selection_values(SelZahlungsart, SelZahlungsart.zahlungsart))
    submit = SubmitField('Speichern')

和观点:

add_billtext = True
    form = BilltextForm()
    if form.validate_on_submit():
        billtext = TBilltext(...,
                             zahlungsart=form.zahlungsart.data)
        return (add_dataset(billtext, "Neuer Rechnungstext erfolgreich hinzugefügt",
                            "Fehler beim Hinzufügen des neuen Rechnungstextes!", "admin.list_billtexts"))
...

似乎 get_selection_values 仅在应用程序启动时运行一次。所以值永远不会被更新......但为什么每次调用它时它都不运行?

标签: pythonflasksqlalchemyflask-sqlalchemy

解决方案


推荐阅读