Hi, Maybe you can solve this in the views.py with commit=False
https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/ And from here you can render the new form with the initial data # Create a form instance with POST data.>>> f = AuthorForm(request.POST) # Create, but don't save the new author instance.>>> new_author = f.save(commit=False) # Modify the author in some way.>>> new_author.some_field = 'some_value' # Save the new instance.>>> new_author.save() On Wed, May 27, 2015 at 2:55 AM, Gergely Polonkai <[email protected]> wrote: > Hello, > > I'm currently having hard times changing a form field's value from within > the form's clean() method. I have already tried setting > self.initial[field_id] and manipulating the cleaned data by calling super's > clean method, change the required field (cleaned_data[field_id]) and > returning the modified dict, but all for no effect. Trying to change > self.data threw me an error saying data is immutable. Question is, is it > even possible, even if I had to tamper with ”protected/private” > properties/methods? > > Should I be on the wrong track, I try to outline the problem: > > I have a form with fields added programmatically in __init__(). The value > of these fields come from one of my models. It is highly possible that > another user puts one of the fields in approved state. If this happens, I > don't want the current user to be able to change its value, hence I raise a > validation error in the field's validate() method. > > Now comes the tricky part. In this particular case I want three things to > happen: > > • warn the user about the fact that the field has already been approved > (i.e. display the validation error message) > • render the input field as read only so the user can't modify it (well, > at least not in a trivial way) > • and revert the field's value to the one in the database > > However, in case of a validation error the field's value remains the > ”illegal” one the user just entered, and, as the input field is rendered > read only, there's no way for him to change it. Thus, I am trying to set it > during MyForm.clean() by walking through field errors looking form the > proper error code ('already_approved'), and once found, set it back to its > database value. This way I hope that my ValidationError remains (hence the > warning on the page) while resetting the unchangeable value so at the time > of the next submit it won't cause a problem. > > Kind regards, > Gergely > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/django-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/CACczBUK2EEaHBaS7bS%3DJF8Ce35MBkrwugtRvZCJC9E_Ovk2Rqg%40mail.gmail.com > <https://groups.google.com/d/msgid/django-users/CACczBUK2EEaHBaS7bS%3DJF8Ce35MBkrwugtRvZCJC9E_Ovk2Rqg%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAJcivacMBoNMG4OMwwkg7CDyYzOccXjz-3it5OdD_Au0r0trzg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

