Reputation: 2421
I can't find any solution to my issue with similar kind of error.
The error is when I try to edit object:
'Intention' object has no attribute 'get'
I have it in line with 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 %}
controller code:
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)
)
Could someone give me any advice?
Trackback:
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'
Upvotes: 51
Views: 72147
Reputation: 865
In Django, be careful how you name your views and models.
In my case, I had this in models.py
:
class Contact(models.Model):
...
In views.py
, I had:
def contact(request):
...
Then, in urls.py
, I had:
from .views import Contact
So, I was actually importing the model class, and not the contact function, so my error was:
'Contact' object has no attribute 'get'
That object has no attribute get
. That's suppose to come from views.py
, not a model
.
Upvotes: 8
Reputation: 2305
The above answer is correct, however, this error can also be generated by incorrectly passing arguments in the init of a form, which is used for an admin model.
Example:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(self, *args, **kwargs)
Notice the double passing of self? It should be:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
Upvotes: 33
Reputation: 25164
Your problem is here:
intention = Intention.objects.get(pk=id)
form = IntentionForm(intention) # An unbound form
The first argument to a form is the data but you are passing the instance. To properly pass the instance you should use:
intention = Intention.objects.get(pk=id)
form = IntentionForm(instance=intention) # An unbound form
Upvotes: 104