Django表示不覆盖之前的条目

时间:2014-06-30 18:44:51

标签: python django django-forms

我目前正在使用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密钥仍旧是旧的。

1 个答案:

答案 0 :(得分:2)

您应该将UserProfile对象作为实例传递,而不是用户。

new_api_form = ChangeApiForm(request.POST, instance=request.user.userprofile)