change a form value before validation in Django form

前端 未结 4 1403
难免孤独
难免孤独 2021-02-19 03:00

I have a django form and on my view function I do this :

search_packages_form = SearchPackagesForm( data = request.POST )

I would like to overw

4条回答
  •  -上瘾入骨i
    2021-02-19 03:28

    My solution is build on an earlier proposal. It is a working solution, which can be used in several cases.

    @Milad Khodabandehloo had a tricky solution to solve the problem.

    changed_data = dict(request.POST)
    changed_data['price'] = NEW_PRICE
    search_packages_form = SearchPackagesForm(data = changed_data)
    

    as @The EasyLearn Academy commented: it does not allow you to access actual data submitted in form.

    This is because the request.POST is immutable.

    But there is a solution to the problem - just have to be more tricky.

    This solution is only good if a reference to the object is enough for the certain cause. It leaves the object itself the same.

    # write object to variable (data)
    data = request.POST
    
    # set to mutable
    data._mutable = True
    
    # modify the values in data 
    data[modified_field] = new_value
    
    # set mutable flag back (optional)
    data._mutable = False
    

    Hope it's useful!

提交回复
热议问题