2012-07-26 17 views
31

Non riesco a trovare alcuna soluzione al mio problema con un tipo simile di errore.non ha attributo 'get'

L'errore è quando si tenta di modificare oggetto:

oggetto 'intenzione' non ha alcun attributo 'ottenere'

ce l'ho in linea con 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 %} 
codice

regolatore:

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) 
          ) 

Qualcuno potrebbe darmi qualche consiglio?

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' 
+1

Sì. Pubblica il traceback completo. –

+0

Ho modificato la domanda – keram

+0

-1 senza commento perché? – keram

risposta

59

il problema è qui:

intention = Intention.objects.get(pk=id) 
form = IntentionForm(intention) # An unbound form 

Il primo argomento ad una forma sono i dati, ma si sta passando l'istanza. Per passare correttamente l'istanza si dovrebbe usare:

intention = Intention.objects.get(pk=id) 
form = IntentionForm(instance=intention) # An unbound form 
+3

come potrei averlo perso, ho letto la documentazione 10 volte https://docs.djangoproject.com/en/dev/topics/forms/modelforms/ – max4ever

15

La risposta di cui sopra è corretta, tuttavia, questo errore può essere generato anche dal passaggio di argomenti in modo non corretto nel init di una forma, che viene utilizzato per un modello di amministrazione .

Esempio:

class MyForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
    super(MyForm, self).__init__(self, *args, **kwargs) 

Avviso il doppio passaggio di auto? Dovrebbe essere:

+6

Live long you man. Grazie. Ho avuto un errore di battitura simile con l'argomento dell'host. – Jay

+3

Ho appena cercato per ore di trovare questa risposta che mi ha suggerito di avere un problema simile.Grazie mille! –

+1

questo era il mio caso, grazie amico! – Antiphon0x

1

In Django, fai attenzione a come nomini i tuoi punti di vista e modelli.

Nel mio caso, ho avuto questo in models.py:

class Contact(models.Model): 
    ... 

In views.py, ho avuto:

def contact(request): 
    ... 

Poi, nel urls.py, ho avuto:

from .views import Contact 

Così , In realtà stavo importando la classe del modello, e non la funzione di contatto, quindi il mio errore wa s:

'Contact' object has no attribute 'get' 

Questo oggetto non ha attributo get. Questo dovrebbe venire da views.py, non uno model.

Problemi correlati