je voudrais créer une page « mise à jour le profil de l'utilisateur » pour permettre aux utilisateurs de modifier leurs profils, donc je viens avec les modèles suivants:problèmes Django Form avec UserProfile
class Profile(models.Model):
user = models.OneToOneField(User)
nick_name = models.CharField(blank=True,max_length=100)
school = models.CharField(blank=True,max_length=100)
motto = models.CharField(blank=True,max_length=100)
class ProfileForm(ModelForm):
class Meta:
model = Profile
Et mon avis est conçu comme :
@login_required
def update_profile_view(request):
if request.method == 'POST':
user = request.user
try:
profile = user.get_profile()
except Exception:
profile = Profile.objects.create(user=user)
form = ProfileForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
profile.nick_name = cd['nick_name']
profile.school = cd['school']
profile.motto = cd['motto']
profile.save()
return HttpResponseRedirect('/main_page/')
else:
form = ProfileForm()
return render(request, 'update_profile.html', {'form':form})
la relation entre un utilisateur et un profil est apparemment 1to1, et à la demande, je peux déterminer l'utilisateur actuel. Le champ utilisateur du formulaire n'a donc pas besoin d'être rempli. Malheureusement, cela n'a pas réussi le test "form.is_valid()". Et il semble difficile de modifier un formulaire avant que "is_valid" ne soit invoqué. Par souci de simplicité, je ne souhaite pas créer ma propre classe de formulaire, et je ne souhaite pas non plus écrire de validation de formulaire personnalisée. Y a-t-il un autre moyen de résoudre le problème?
Quel est le message d'erreur réelle/retraçage? Vous pouvez essayer d'instancier le formulaire avec ProfileForm (request.POST, instance = profile) ... – Jingo
Question très similaire avec des réponses utiles ici: [Django, mise à jour d'un profil utilisateur avec un ModelForm] (http://stackoverflow.com/ questions/1823588/django-update-a-user-profile-avec-un-modelform). – dgel