【问题标题】:type object 'word' has no attribute 'update'类型对象“单词”没有属性“更新”
【发布时间】:2015-11-04 02:52:12
【问题描述】:

我正在为用户构建一个表单以更新对象中的字段。

这是一个包含表单列表的页面,用于更新模型的不同实例。大多数表单都可以正常工作,但是当我尝试提交页面中的第一个表单时,出现错误:type object 'word' has no attribute 'update'。我没有一个名为“word”的类,并且仅当我尝试在页面上提交第一个表单时才会出现此错误。有任何想法吗?提前致谢!

在模板中:

{% for corr in correction_list %}

  <tr><td>{{corr.correction_author}}</td><td>{{corr.time | date:"m/d/Y"}}</td>
      <td>{{corr.corrected_word.kwicl}}</td><td>{{corr.corrected_word.keyword}}</td>
      <td>{{corr.corrected_word.kwicr}}</td><td>{{corr.corrected_word.choice1}}</td>
      <td>{{corr.corrected_word.choice2}}</td><td>{{corr.corrected_word.choice3}}</td>
      <td>{{corr.corrected_word.correct_choice}}</td><td>{{corr.corrected_word.manually_entered_word}}</td>
      <td>{{corr.correction_made}}</td><td>{{corr.correction_word}}</td>
      <td><form action="../approval/" method="POST">
              {% csrf_token %}
              Decision:
              <select name="approved">
                <option value=1>Approve</option>
                  <option value=2>Reject</option>
                  <option value=0>Hold</option>
              </select><br>
                <input type="text" name="corrected_word" value={{corr.corrected_word.file_position}} hidden="True"/>

                <input type="number" name="correction_made" value={{corr.correction_made}} hidden="True"/>
                {% if corr.correction_word %}
                <input type="text" name="correction_word" value={{corr.correction_word}} hidden="True"/>
                {% else%}
                <input type="text" name="correction_word" value="" hidden="True"/>
                {% endif %}

                 <input type="submit"/></form></td></tr>
{% endfor %}

在views.py中:

def submit_approval(request):
if hasattr(request, 'user') and request.user.is_authenticated():
    corrected_word = request.POST['corrected_word']
    updateword = item.objects.filter(file_position=corrected_word)[0]
    correction_made = request.POST['correction_made']
    correction_word = request.POST['correction_word']
    approval = request.POST['approved']
    corr = correction.objects.filter(corrected_word=updateword).filter(correction_made=correction_made).filter(correction_word=correction_word)

    if request.method == 'POST':
        for entry in corr:
            entry.approved = approval
            entry.save()
        return HttpResponse('thanks')

    return render(request, "revision.html")

在 urls.py 中:

url(r'^approval/$', 'english.views.submit_approval'),  

追溯:

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

Django Version: 1.8.3  
Python Version: 2.7.5  
Installed Applications:  
('django.contrib.admin',  
 'django.contrib.auth',  
 'django.contrib.contenttypes',  
 'django.contrib.sessions',  
 'django.contrib.messages',  
 'django.contrib.staticfiles',  
 'english')  
Installed Middleware:  
('django.contrib.sessions.middleware.SessionMiddleware',  
 'django.middleware.common.CommonMiddleware',  
 'django.contrib.auth.middleware.AuthenticationMiddleware',  
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',  
 'django.contrib.messages.middleware.MessageMiddleware',  
 'django.middleware.clickjacking.XFrameOptionsMiddleware',  
 'django.middleware.security.SecurityMiddleware')  


Traceback:  
File "/Users/vl/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)  
File "/Users/vl/english/english/views.py" in revision
  151.             word.update(approved=formdata)  

Exception Type: AttributeError at /revision/  
Exception Value: type object 'word' has no attribute 'update'  

【问题讨论】:

  • 堆栈跟踪是什么?
  • 你能给我们完整的堆栈跟踪吗?也许这个异常是从另一个模块抛出的,也许是你的......所以给我们更多信息。
  • @VickieLi 请编辑问题以包含堆栈跟踪,而不是将其作为评论
  • 回溯清楚地表明错误发生在revision 视图中,而不是在submit_approval
  • 谢谢!似乎只有我在模板中的第一个表单映射到错误的视图。是什么原因造成的?

标签: python django forms


【解决方案1】:

问题在于您的表单action 代码。在 django 中对任何 url 进行硬编码通常是一种不好的做法。如果你的 url 改变了,你必须到处改变。查看文档:https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#url

根据文档,最佳做法是:

  1. 为您的网址命名以供参考:

url(r'^approval/$', 'english.views.submit_approval', name="submit-approval"),

  1. 在您的表单操作中,请参考该网址:

&lt;form action="{% url 'submit-approval' %}" method="POST"&gt;&lt;/form&gt;

【讨论】:

  • 感谢您的回复!这很有帮助。但我不认为这是问题所在,因为除了页面呈现的第一个表单之外,所有表单都正确提交。
猜你喜欢
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多