Skip to content
Advertisement

Inserting a request.form.items() list into a mongodb collection / Adding list of lists into mongoDB

I have the following code:

@app.route("/create", methods=["POST", "GET"])
@login_required
def create():
    if request.method == "POST":    
        list = []
        for x in request.form.items():
            if x[0] == "date":
                datefc = datetime.strptime(x[1], "%Y-%m-%d")
            elif x[0] == "frequency":
                frequency = x[1]
            elif x[0] == "submit":
                continue
            else:
                list.append(x)

        adate = datetime.today()

        if frequency == "Weekly":
            nContactTime = datefc + timedelta(days=7)
        elif frequency == "Monthly":
            nContactTime = datefc + timedelta(days=30)
        elif frequency == "Quarterly":
            nContactTime = datefc + timedelta(days=90)

        people.insert_one({list, "frequency": frequency, "parentrecord": current_user.user_json['_id'], "dateadded": adate.strftime("%x"),"datefc": datefc, "nextContact": nContactTime})

        flash('Your record has been entered successfully.')
        return redirect(url_for('profile'))

I use for x in request.form.items() to loop through a dynamically generated form. Users create custom fields that can be added. I then add the results to a list of which an example of a print out is:

[('name', 'David'), ('phone', '90'), ('email', 'inf'), ('company', 'Ran'), ('Kids Names', 'Kids Names'), ('Kids Birthday', '2022-08-03'), ("Wife's Email", 'Test@test.com')]

My issue is when I attempt to run the code I get a syntax error:

Traceback (most recent call last):
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310librunpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310librunpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesflask__main__.py", line 3, in <module>
    main()
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesflaskcli.py", line 986, in main
    cli.main()
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesflaskcli.py", line 567, in main
    return super().main(*args, **kwargs)
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesclickcore.py", line 1055, in main
    rv = self.invoke(ctx)
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesclickcore.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesclickcore.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesclickcore.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesclickdecorators.py", line 84, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesclickcore.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesflaskcli.py", line 848, in run_command
    app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesflaskcli.py", line 279, in __init__
    self._load_unlocked()
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesflaskcli.py", line 313, in _load_unlocked
    self._app = rv = self.loader()
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesflaskcli.py", line 373, in load_app
    app = locate_app(import_name, None, raise_if_not_found=False)
  File "C:UsersDavid PCAppDataLocalProgramsPythonPython310libsite-packagesflaskcli.py", line 214, in locate_app
    __import__(module_name)
  File "C:UsersDavid PCDesktopVS Code PythonFlask Siteapp.py", line 150
    people.insert_one({list, "frequency": frequency, "parentrecord": current_user.user_json['_id'], "dateadded": adate.strftime("%x"),"datefc": datefc, "nextContact": nContactTime})
                                        ^
SyntaxError: invalid syntax

Process finished with exit code 1

I am fairly confident the issue arises that my list is improperly formated (or my insert is). I’ve tried converting it using json_dumps, etc and nothing seems to work. Assistance would be appreciated!

Advertisement

Answer

The issue I was facing above was because I was using a list vs a dictionary. I modified my code to be:

@app.route("/create", methods=["POST", "GET"])
@login_required
def create():
    if request.method == "POST":
        nList = {}
        for x in request.form.items():
            if x[0] == "date":
                datefc = datetime.strptime(x[1], "%Y-%m-%d")
            elif x[0] == "frequency":
                frequency = x[1]
                nList.update({"frequency":x[1]})
            elif x[0] == "submit":
                continue
            else:
                nList.update({x[0]:x[1]})

        adate = datetime.today()
        nList.update({"datefc": adate})
        nList.update({"parentrecord": current_user.user_json['_id']})
        nList.update({"dateadded": adate.strftime("%x")})

        if frequency == "Weekly":
            nContactTime = datefc + timedelta(days=7)
            nList.update({"nextContact": nContactTime})
        elif frequency == "Monthly":
            nContactTime = datefc + timedelta(days=30)
            nList.update({"nextContact": nContactTime})
        elif frequency == "Quarterly":
            nContactTime = datefc + timedelta(days=90)
            nList.update({"nextContact": nContactTime})

        people.insert_one(nList)

        flash('Your record has been entered successfully.')
        return redirect(url_for('profile'))

And the problem was solved. The key was using nList = {} and nList.update() vs using nList = [] and nList.append()

2 People found this is helpful
Advertisement