Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用查询工厂从QuerySelectField获取数据值_Python_Flask Sqlalchemy_Wtforms - Fatal编程技术网

Python 使用查询工厂从QuerySelectField获取数据值

Python 使用查询工厂从QuerySelectField获取数据值,python,flask-sqlalchemy,wtforms,Python,Flask Sqlalchemy,Wtforms,我无法使用query\u工厂保存QuerySelectField中的数据。我将始终以以下内容结束: 错误消息 InterfaceError: (sqlite3.InterfaceError) Error binding parameter 2 - probably unsupported type. [SQL: u'INSERT INTO asset_objects (asset_name, asset_type, asset_owner) VALUES (?, ?, ?)'] [param

我无法使用query\u工厂保存QuerySelectField中的数据。我将始终以以下内容结束:

错误消息

InterfaceError: (sqlite3.InterfaceError) 
Error binding parameter 2 - probably unsupported type. 
[SQL: u'INSERT INTO asset_objects (asset_name, asset_type, asset_owner)
VALUES (?, ?, ?)'] [parameters: (u'd', u'Process', <__main__.Model_New_Users 
object at 0x03819A50>)]
@app.route('/add_asset', methods=['GET', 'POST'])
def add_asset():
    form = Form_New_Asset()
    if request.method == 'POST':
        if not request.form['asset_name'] or not request.form['asset_type']:
            flash(u'Fill out all fields...', 'error')
        else:
            add_data = Model_New_Asset(asset_name=form.asset_name.data,
                                       asset_type=form.asset_type.data,
                                       asset_owner=form.asset_owner.data)
           db.session.add(add_data)
           db.session.commit()
           flash('Post saved', 'info')
 ...
表格

class Form_New_Asset(Form):
    asset_name = StringField(u'Asset')
    asset_type = SelectField(u'Asset type', 
                             choices=[('Process', 'Process'),
                                      ('Information', 'Information'),
                                      ('Informationssystem', 'Informationssystem'),
                                      ('Applikation', 'Applikation')])
    # From Model_New_Users
    asset_owner = QuerySelectField(u'Owner',
                                   query_factory=lambda: Model_New_Users.query.all(),
                                   get_label='owner_name')
    submit = SubmitField('Save')
路线

InterfaceError: (sqlite3.InterfaceError) 
Error binding parameter 2 - probably unsupported type. 
[SQL: u'INSERT INTO asset_objects (asset_name, asset_type, asset_owner)
VALUES (?, ?, ?)'] [parameters: (u'd', u'Process', <__main__.Model_New_Users 
object at 0x03819A50>)]
@app.route('/add_asset', methods=['GET', 'POST'])
def add_asset():
    form = Form_New_Asset()
    if request.method == 'POST':
        if not request.form['asset_name'] or not request.form['asset_type']:
            flash(u'Fill out all fields...', 'error')
        else:
            add_data = Model_New_Asset(asset_name=form.asset_name.data,
                                       asset_type=form.asset_type.data,
                                       asset_owner=form.asset_owner.data)
           db.session.add(add_data)
           db.session.commit()
           flash('Post saved', 'info')
 ...
似乎我无法从查询工厂功能(资产所有者)检索实际数据


感谢您的帮助

问题是您提供了一个
Model\u New\u Users
的实例作为第二个(0索引)参数

InterfaceError: (sqlite3.InterfaceError) 
Error binding parameter 2 - probably unsupported type. 
[SQL: u'INSERT INTO asset_objects (asset_name, asset_type, asset_owner)
VALUES (?, ?, ?)'] [parameters: (u'd', u'Process', <__main__.Model_New_Users object at 0x03819A50>)]
这是通过表单中的lambda查询的:

asset_owner = QuerySelectField(u'Owner',
                               query_factory=lambda: Model_New_Users.query.all(),
                               get_label='owner_name')
然后在更新中传递整个对象。我想这就是问题所在

        add_data = Model_New_Asset(asset_name=form.asset_name.data,
                                   asset_type=form.asset_type.data,
                                   asset_owner=form.asset_owner.data)

我认为您可以通过指定要通过
Model\u New\u Users
上的哪个字段来修复它。类似于
form.asset\u owner.data.owner\u name
之类的东西。

问题是您提供了一个
Model\u New\u Users
的实例作为第二个(0索引)参数

InterfaceError: (sqlite3.InterfaceError) 
Error binding parameter 2 - probably unsupported type. 
[SQL: u'INSERT INTO asset_objects (asset_name, asset_type, asset_owner)
VALUES (?, ?, ?)'] [parameters: (u'd', u'Process', <__main__.Model_New_Users object at 0x03819A50>)]
这是通过表单中的lambda查询的:

asset_owner = QuerySelectField(u'Owner',
                               query_factory=lambda: Model_New_Users.query.all(),
                               get_label='owner_name')
然后在更新中传递整个对象。我想这就是问题所在

        add_data = Model_New_Asset(asset_name=form.asset_name.data,
                                   asset_type=form.asset_type.data,
                                   asset_owner=form.asset_owner.data)

我认为您可以通过指定要通过
Model\u New\u Users
上的哪个字段来修复它。类似于
form.asset\u owner.data.owner\u name
之类的东西。

您获得实例的原因是您没有给出

def\uuu str\uuu():


代表性。希望这项帮助对像我这样的新手有帮助。

您获得实例的原因是因为您没有给出

def\uuu str\uuu():

代表性。希望这能帮助像我这样的新手