seguito alle opere eccellenti in guscio:Come aggiornare l'oggetto Utente senza crearne uno nuovo?
>>> from django.contrib.auth.models import User
>>> user=User.objects.get(pk=1)
>>> user.first_name = u'Some'
>>> user.last_name = u'Name'
>>> user.save()
>>> user.first_name
u'Some'
>>> user.last_name
u'Name'
poi cerco di fare lo stesso con le forme:
# forms.py
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name']
# views.py
def edit_names(request, template_name="registration/edit_names.html"):
if request.method == "POST":
form = UserForm(data=request.POST)
if form.is_valid():
user = form.save(commit=False)
user.save()
url = urlresolvers.reverse('my_account')
return HttpResponseRedirect(url)
else:
form = UserForm(instance=request.user)
page_title = _('Edit user names')
return render_to_response(template_name, locals(),
context_instance=RequestContext(request))
# edit_names.html
<form action="." method="post">{% csrf_token %}
<table>
{{ form.as_table }}
<tr><td colspan="2">
<input type="submit" />
</td></tr>
</table>
</form>
apro pagina in del browser e vedere due campi First name
e Last name
. Quando ho compilare i campi e inviare il modulo ottengo l'errore:
Exception Type: IntegrityError
Exception Value: column username is not unique
Ho anche provato ad aggiungere alla lista ['username']
campi in form. Se posso inviare il modulo con il mio nome utente (come request.user), la forma viene visualizzato errorMessage:
User with this Username already exists.
Se cambio il nome utente per qualche nome univoco, viene creato il nuovo utente con quel nome utente.
La domanda è: Come posso aggiornare l'oggetto Utente, non crearne uno nuovo?
Mi dispiace per essere stato così prolisso, ma ho avuto una ricerca difficile qui e non ho trovato la risposta alla mia domanda.
BTW, questi casi non funzionano per me:
- Extending UserCreationForm to include email, first name, and last name
- add field first_name and last_name in django-profile
- How to create a UserProfile form in Django with first_name, last_name modifications?
EDIT:
come suggerito @fceruti ho appena aggiunto su req uest.method == 'post' ramo questo:
form = UserForm(data=request.POST, instance=request.user)
non ci sarà un 'richiesta. utente' se questo è un modulo di registrazione –
ma è un modulo utente di modifica: P – fceruti
ah scusa, non ho letto il nome della vista –