我找不到任何类似错误的解决方案。
错误是当我尝试编辑对象时:
'意图'对象没有属性'get'
我认为它符合form.as_p:
{% extends "layout.html" %}
{% block content %}
<form action="{{ form_url }}" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{% endblock %}
控制器代码:
def edit(request, id):
if request.method == 'POST': # If the form has been submitted...
form = IntentionForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
# ...
intention = form.save()
return HttpResponseRedirect(reverse_lazy('intention-show', args=[intention.id])) # Redirect after POST
else:
intention = Intention.objects.get(pk=id)
form = IntentionForm(intention) # An unbound form
return render_to_response('intentions/templates/form.html',
{'form': form, 'form_url': reverse_lazy('intention-edit', args=[intention.id])},
context_instance=RequestContext(request)
)
有人可以给我任何建议吗?
引用:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/intentions/3/edit
Django Version: 1.4
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'intentions',
'django.contrib.admin')
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')
Template error:
In template /home/marek/devel/django/prayer/intentions/templates/form.html, error at line 4
'Intention' object has no attribute 'get'
1 : {% extends "layout.html" %}
2 : {% block content %}
3 : <form action="{{ form_url }}" method="post">{% csrf_token %}
4 : {{ form.as_p }}
5 : <input type="submit" value="Submit" />
6 : </form>
7 : {% endblock %}
8 :
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/home/marek/devel/django/prayer/intentions/views.py" in edit
55. context_instance=RequestContext(request)
File "/usr/local/lib/python2.7/dist-packages/django/shortcuts/__init__.py" in render_to_response
20. return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py" in render_to_string
176. return t.render(context_instance)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in render
140. return self._render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in _render
134. return self.nodelist.render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in render
823. bit = self.render_node(node, context)
File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
74. return node.render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py" in render
123. return compiled_parent._render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in _render
134. return self.nodelist.render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in render
823. bit = self.render_node(node, context)
File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
74. return node.render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py" in render
62. result = block.nodelist.render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in render
823. bit = self.render_node(node, context)
File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
74. return node.render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render
84. output = self.filter_expression.resolve(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in resolve
571. obj = self.var.resolve(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in resolve
721. value = self._resolve_lookup(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in _resolve_lookup
772. current = current()
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in as_p
238. errors_on_separate_row = True)
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in _html_output
143. top_errors = self.non_field_errors() # Errors that should be displayed above all fields.
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in non_field_errors
246. return self.errors.get(NON_FIELD_ERRORS, self.error_class())
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in _get_errors
115. self.full_clean()
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in full_clean
270. self._clean_fields()
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in _clean_fields
281. value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))
File "/usr/local/lib/python2.7/dist-packages/django/forms/widgets.py" in value_from_datadict
205. return data.get(name, None)
Exception Type: AttributeError at /intentions/3/edit
Exception Value: 'Intention' object has no attribute 'get'
答案 0 :(得分:66)
你的问题在这里:
intention = Intention.objects.get(pk=id)
form = IntentionForm(intention) # An unbound form
表单的第一个参数是数据,但是您正在传递实例。要正确传递实例,您应该使用:
intention = Intention.objects.get(pk=id)
form = IntentionForm(instance=intention) # An unbound form
答案 1 :(得分:21)
上面的答案是正确的,但是,错误也可以通过在表单的 init 中错误地传递参数来生成,该表单用于管理模型。
示例:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(self, *args, **kwargs)
注意自我的双重传递?它应该是:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
答案 2 :(得分:3)
在Django中,要小心你如何命名你的观点和模型。
就我而言,我在models.py
:
class Contact(models.Model):
...
在views.py
,我有:
def contact(request):
...
然后,在urls.py
,我有:
from .views import Contact
所以,我实际上是在导入模型类,而不是联系函数,所以我的错误是:
'Contact' object has no attribute 'get'
该对象没有属性get
。这假设来自views.py
,而不是model
。