Question

J'ai un modèle comme suit

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 modèle est le suivant

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 poste un formulaire, il n'est jamais mis à jour. Je sais que form.save () est appelé en raison de la présence d’une impression dans le serveur de développement.

Était-ce utile?

La solution

Andy Hume avait raison dans les commentaires de votre question.

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

Ce que vous voulez faire est le suivant:

form = PrivacyForm(request.POST, instance=UserPrivacy.objects.get(user=request.user)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top