【问题标题】:TypeError: unhashable type: 'set' in Flask FormTypeError: unhashable type: 'set' in Flask Form
【发布时间】:2021-05-10 22:47:45
【问题描述】:

我正在尝试从 Flask 中的表单获取数据:

app.py

@app.route('/newProjectCreation/', methods=['GET', 'POST'])
def newProjectCreation():
    try:
        if request.method == 'POST':
            # Data Fetch from Models Form
            name = request.form['modelName']
            modelDescription = request.form['modelDescription']
            inputType = request.form.getlist['inputType[]']
            outputType = request.form.getlist['outputType[]']
            model = request.files['model']
            modelLanguage = request.form['modelLanguage']

HTML

这是一个简单的表单(不是 Flask-WTF 表单),字段“inputType”和“outputType”应该返回数组,因为它们是dynamically input fields .

错误:

Traceback (most recent call last):
  File "/home/adiagarwal/cad/flaskapp-docker/flaskapp/app.py", line 106, in newProjectCreation
    inputType = request.form.getlist['inputType[]']
TypeError: 'method' object is not subscriptable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/adiagarwal/cad/env/lib/python3.8/site-packages/flask/app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/adiagarwal/cad/env/lib/python3.8/site-packages/flask/app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "/home/adiagarwal/cad/env/lib/python3.8/site-packages/flask/app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/adiagarwal/cad/env/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/adiagarwal/cad/env/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/adiagarwal/cad/env/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/adiagarwal/cad/env/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/adiagarwal/cad/env/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/adiagarwal/cad/env/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/adiagarwal/cad/env/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/adiagarwal/cad/flaskapp-docker/flaskapp/app.py", line 129, in newProjectCreation
    return {{e}}
TypeError: unhashable type: 'set'

本人没有 js 方面的经验,正在学习中,如果可能请简化回答。

提前谢谢你。

【问题讨论】:

  • 您正在尝试使用 set 作为 Python 中字典的键。 set 不能用作可散列值。
  • 那么,我应该怎么做呢?其实我没看懂你的回复。请指导
  • 请分享完整的错误,确切地指出错误出现的位置。此外,请检查 Python 中的 set 是什么以及它们是否可以拥有。
  • 据此 -> stackoverflow.com/questions/6310867/… :集合不可散列,集合是可变的,它们不可散列。

标签: python forms flask form-submit


【解决方案1】:

好的,我专注于一个大问题,但问题是如此简单以至于我没有意识到:将所有[]替换为()。见下文。

如果您 [] 它假定为 dict 并且您正在返回一个列表或集合。

    @app.route('/newProjectCreation/', methods=['GET', 'POST'])
    def newProjectCreation():
        try:
            if request.method == 'POST':
                # Data Fetch from Models Form
                name = request.form('modelName')
                modelDescription = request.form('modelDescription')
                inputType = request.form.getlist('inputType[]')
                outputType = request.form.getlist('outputType[]')
                model = request.files('model')
                modelLanguage = request.form('modelLanguage')

【讨论】:

  • 嗨,谢谢,我尝试了解决方案,但有一点改变:所有[] 不会被() 替换,它只是用于“inputType”和“outputType”的字段将会改变。
  • 但是现在在我输入文件的那一行(倒数第二行)出现了另一个问题。
  • 请分享错误。没有人可以预测错误,因为您不分享 [MRC] (stackoverflow.com/help/minimal-reproducible-example)
  • 第二个错误--> stackoverflow.com/questions/67481914/… 请检查并建议。
猜你喜欢
  • 2021-08-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2015-02-11
  • 1970-01-01
相关资源
最近更新 更多