Domanda
Ho un modello come segue
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)
Il mio modello è il seguente
class PrivacyForm(ModelForm):
class Meta:
model = UserPrivacy
exclude = ('user','location')
La mia funzione è simile a questa per visualizzare e aggiornare il modulo.
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))
Il mio user_id nel db è 1 .. ma quando invio un modulo non viene mai aggiornato. So che form.save () viene chiamato per aver messo una stampa lì e viene mostrato nel server di sviluppo.
Soluzione
Andy Hume aveva ragione nei commenti alla tua domanda.
Hai un ModelForm basato sul modello UserPrivacy, ma gli stai passando un'istanza di Utente.
Quello che vuoi fare è questo:
form = PrivacyForm(request.POST, instance=UserPrivacy.objects.get(user=request.user)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow