modèle de mise à jour Django
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.
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