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.

Reply via email to