45

同様の種類のエラーで問題の解決策が見つかりません。

エラーは、オブジェクトを編集しようとしたときです。

'Intention'オブジェクトには属性'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'
4

3 に答える 3

92

あなたの問題はここにあります:

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
于 2012-07-26T12:23:05.177 に答える
31

上記の答えは正しいですが、このエラーは、管理モデルに使用されるフォームの初期化で引数を誤って渡すことによっても生成される可能性があります。

例:

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)
于 2016-04-30T06:58:58.433 に答える
6

Djangoでは、ビューとモデルの名前の付け方に注意してください。

私の場合、私はこれを持っていましたmodels.py

class Contact(models.Model):
    ...

views.py、私は持っていました:

def contact(request):
    ...

次に、でurls.py、私は持っていました:

from .views import Contact

つまり、連絡先関数ではなく、実際にモデルクラスをインポートしていたので、エラーは次のようになりました。

'Contact' object has no attribute 'get'

そのオブジェクトには属性がありませんgetviews.pyこれは、からではなく、から来ると想定されますmodel

于 2017-03-21T02:28:02.303 に答える