ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – Django,UserChangeForm错误

2019-07-29 17:55:46  阅读:156  来源: 互联网

标签:python django django-forms


我正在制作一个自定义用户表单,用户可以在其中更改一些细节.它有两个错误,我无法理解问题是什么.

第一个问题是表单没有填写用户详细信息.这似乎是因为表单初始化时self是空的,为什么?

第二个问题是,当我提交此表单时,它会抱怨一些KeyError,我也没有.我已经粘贴了代码和堆栈跟踪.

追溯

Environment:


Request Method: POST
Request URL: http://localhost:8000/settings/

Django Version: 1.4
Python Version: 2.7.2
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'social_auth')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "c:\tools\python27\lib\site-packages\django-1.4-py2.7.egg\django\core\handlers\base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "c:\tools\python27\lib\site-packages\django-1.4-py2.7.egg\django\contrib\auth\decorators.py" in _wrapped_view
  20.                 return view_func(request, *args, **kwargs)
File "C:\xampp\htdocs\tddd27_project\contact\views.py" in settings
  47.       if form.is_valid():
File "c:\tools\python27\lib\site-packages\django-1.4-py2.7.egg\django\forms\forms.py" in is_valid
  124.         return self.is_bound and not bool(self.errors)
File "c:\tools\python27\lib\site-packages\django-1.4-py2.7.egg\django\forms\forms.py" in _get_errors
  115.             self.full_clean()
File "c:\tools\python27\lib\site-packages\django-1.4-py2.7.egg\django\forms\forms.py" in full_clean
  270.         self._clean_fields()
File "c:\tools\python27\lib\site-packages\django-1.4-py2.7.egg\django\forms\forms.py" in _clean_fields
  290.                     value = getattr(self, 'clean_%s' % name)()
File "c:\tools\python27\lib\site-packages\django-1.4-py2.7.egg\django\contrib\auth\forms.py" in clean_password
  122.         return self.initial["password"]

Exception Type: KeyError at /settings/
Exception Value: 'password'

views.py

def settings(request):

    if request.method == 'POST':
        form = UserProfileForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponse("Change success")
    else:
        form = UserProfileForm(instance=request.user)
    return render_to_response('settings.html',{'form': form}, context_instance=RequestContext(request))

forms.py

class UserProfileForm(UserChangeForm):

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name')
        exclude = ('password',)

    def __init__(self, *args, **kwargs):
        super(UserProfileForm, self).__init__(*args, **kwargs)
        if self.instance  and self.instance.pk:
            self.fields['username'] = self.instance.username
            self.fields['first_name'] = self.instance.first_name
            self.fields['last_name'] = self.instance.last_name

模板

{% extends "base.html" %}

{% block title %}
    Settings
{% endblock title %}

{% block content %}
 {{ user.username }}
    <form action="" method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="submit">
    </form>
{% endblock content %}

解决方法:

关于你的第二个问题,我今天也遇到了同样的问题,同时从Django 1.3更新到Django 1.4.我有一个像你一样的自定义表单:

class UserProfileForm(UserChangeForm):
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', )

我通过添加如下的clean_password方法解决了这个问题:

class UserProfileForm(UserChangeForm):
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', )

    def clean_password(self):
        return "" # This is a temporary fix for a django 1.4 bug

标签:python,django,django-forms
来源: https://codeday.me/bug/20190729/1573932.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有