我目前正在使用Django中的表单让用户输入API密钥,然后保存。然而。我想让用户有机会稍后更改此密钥,或者如果他们已经这样做,则添加一个密钥。但是,当我尝试输入新的API密钥时,它不会覆盖以前的条目。
这是我的models.py文件:
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
quandl_api = models.CharField(max_length=30, blank=True)
def __unicode__(self):
return self.user.username
这是我的forms.py文件:
class ChangeApiForm(forms.ModelForm):
quandl_api = forms.CharField(required=True)
class Meta:
model = UserProfile
fields = ('quandl_api',)
这是我的views.py文件:
@login_required
def change_api(request):
context = RequestContext(request)
registered = False
if request.POST:
new_api_form = ChangeApiForm(request.POST, instance=request.user)
if new_api_form.is_valid():
new_api_form.save()
return HttpResponseRedirect('/account')
else:
new_api_form = ChangeApiForm()
return render_to_response('ui/change_api.html', {'new_api_form': new_api_form}, context_instance=RequestContext(request))
在我提交表单以输入新的API密钥后,页面会刷新并转到"帐户页面"正如我在views.py文件中指定的那样。但是那里的API密钥仍旧是旧的。
答案 0 :(得分:2)
您应该将UserProfile对象作为实例传递,而不是用户。
new_api_form = ChangeApiForm(request.POST, instance=request.user.userprofile)