2009-03-10 9 views
1

J'ai un modèle comme suitmise à jour django ModelForm

class UserPrivacy(models.Model): 
    user = models.ForeignKey(User) 
    profile = models.SmallIntegerField(default=1, choices=PRIVACY_TYPE) 
    contact = models.SmallIntegerField(default=1, choices=PRIVACY_TYPE) 
    friends = models.SmallIntegerField(default=1, choices=PRIVACY_TYPE) 
    location = models.SmallIntegerField(default=1, choices=PRIVACY_TYPE) 

Mon ModelForm est la suivante

class PrivacyForm(ModelForm): 
    class Meta: 
     model = UserPrivacy 
     exclude = ('user','location') 

Ma fonction ressemble à ceci pour afficher et mettre à jour le formulaire.

def show_privacy(request): 
    if not request.user.is_authenticated(): 
     return HttpResponseRedirect('/') 

    if request.method == 'POST': 
     form = PrivacyForm(request.POST, instance=User.objects.get(pk=request.session['id'])) 
     if form.is_valid(): 
      form.save() 

    else: 
     form = PrivacyForm() 

    return render_to_response('settings_privacy.html', {'form': form}, context_instance=RequestContext(request)) 

Mon ID utilisateur dans la base de données est 1 .. mais lorsque je publie un formulaire, il n'est jamais mis à jour. Je sais que le fichier form.save() est appelé en raison d'une impression et il est affiché dans le serveur de développement.

+1

je pourrais être un peu rouillé sur les formes, mais pourquoi êtes-vous passer un objet utilisateur dans le formulaire UserPrivacy? Ne passeriez-vous pas normalement dans une instance UserPrivacy? –

+0

Je souhaite mettre à jour les éléments en fonction de l'utilisateur connecté. – Mike

+0

Mais comment les champs du modèle User correspondent-ils aux champs du modèle UserPrivacy? Essayez-vous simplement de définir le champ utilisateur du formulaire UserPrivacy? –

Répondre

8

Andy Hume avait raison dans les commentaires à votre question.

Vous avez une ModelForm basée sur le modèle UserPrivacy, mais vous lui transmettez une instance de User.

Qu'est-ce que vous voulez faire est la suivante:

form = PrivacyForm(request.POST, instance=UserPrivacy.objects.get(user=request.user) 
Questions connexes