Comment puis-je changer un Django forme de valeur de champ avant de l'enregistrer?

if request.method == 'POST':
    userf = UsersModelForm(request.POST)
    username = userf.data['username']
    password = userf.data['password']
    passwordrepeat = userf.data['passwordrepeat']
    email = userf.data['email']

J'ai essayé ceci:

    tempSalt = bcrypt.gensalt()
    password = bcrypt.hashpw(password,tempSalt)
    passwordrepeat = bcrypt.hashpw(passwordrepeat,tempSalt)

    userf.data['password'] = password
    userf.data['passwordrepeat'] = passwordrepeat

Mais je suis d'erreur. Comment puis-je changer la valeur de userf.data['password'] et userf.data['passwordrepeat'] avant de l'enregistrer?

Erreur:

AttributeError at /register

This QueryDict instance is immutable

Request Method:     POST
Request URL:    http://127.0.0.1:8000/register
Django Version:     1.3.1
Exception Type:     AttributeError
Exception Value:    

This QueryDict instance is immutable

Exception Location:     /usr/local/lib/python2.6/dist-packages/django/http/__init__.py in _assert_mutable, line 359
Python Executable:  /usr/bin/python
Python Version:     2.6.6
Python Path:    

['/home/user1/djangoblog',
 '/usr/lib/python2.6',
 '/usr/lib/python2.6/plat-linux2',
 '/usr/lib/python2.6/lib-tk',
 '/usr/lib/python2.6/lib-old',
 '/usr/lib/python2.6/lib-dynload',
 '/usr/local/lib/python2.6/dist-packages',
 '/usr/lib/python2.6/dist-packages',
 '/usr/lib/python2.6/dist-packages/gst-0.10',
 '/usr/lib/pymodules/python2.6',
 '/usr/lib/pymodules/python2.6/gtk-2.0']
  • Ce type d'erreur avez-vous ? Erreur de Validation, erreur d'intégrité ? Vous devez toujours poster le message d'erreur. TOUJOURS.
  • J'ai mis à jour l'erreur, voir que de nouveau à comprendre.
  • Nous avons besoin de ce que vous voulez faire ainsi: définir une valeur par défaut, définissez une valeur si pas de valeur existent, corriger une valeur si elle n'est pas bien, etc. Il y a plusieurs hameçons sur django formes.
  • J'ai mis à jour le post original/question. Voir que de nouveau à comprendre.
  • Il ne nous dit pas ce que vous voulez faire, il raconte utiliser ce que vous faites. Quel résultat voulez-vous ? Pas au niveau de la programmation, au niveau de la fonction.
  • Vous pouvez utiliser le django interne de la fonction de hachage django.contrib.auth.hashers.make_password au lieu bcrypt.hashpw

InformationsquelleAutor shibly | 2012-01-19