6

クエリセットで使用中にエラーが発生しget_or_createました:

TypeError at ...save()で予期しないキーワード引数 'using' を取得しました

これは私の見解です:

class MailingListSubscriptionForm(forms.ModelForm):
    """Form for subscribing to a mailing list"""
    # Notes : This form will not check the uniquess of
    # the 'email' field, by defining it explictly and setting
    # it the Meta.exclude list, for allowing registration
    # to a mailing list even if the contact already exists.
    # Then the contact is always added to the subscribers field
    # of the mailing list because it will be cleaned with no
    # double.

    email = forms.EmailField(label=_('Email'), max_length=75)

    def save(self, mailing_list):
        data = self.cleaned_data
        contact, created = Subscriber.objects.get_or_create(
            email__exact=data['email'], defaults={'email': data['email']}
        )

        mailing_list.subscribers.add(contact)
        mailing_list.unsubscribers.remove(contact)

    class Meta:
        model = Subscriber
        fields = ('email',)

これは完全なトレースバックです:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/home/newsletter/

Django Version: 1.4.3
Python Version: 2.7.3
Installed Applications:
('jmb.core',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'south',
 'easy_thumbnails',

 'web',
 'sccore.profiles',
 'django.contrib.admin',
 'django_extensions',

 'cms',
 'mptt',
 'menus',
 'south',
 'sekizai',
 'cms.plugins.flash',
 'cms.plugins.googlemap',
 'cms.plugins.link',
 'cms.plugins.snippet',
 'cms.plugins.text',
 'cms.plugins.twitter',
 'filer',
 'cmsplugin_filer_file',
 'cmsplugin_filer_folder',
 'cmsplugin_filer_image',
 'cmsplugin_filer_teaser',
 'cmsplugin_filer_video',
 'easy_thumbnails',
 'tinymce',

 'debug_toolbar',
 'django_extensions')
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',
 'jmb.core.middleware.thread_local.ThreadLocals',
 'cms.middleware.multilingual.MultilingualURLMiddleware',
 'cms.middleware.page.CurrentPageMiddleware',
 'cms.middleware.user.CurrentUserMiddleware',
 'cms.middleware.toolbar.ToolbarMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware')


Template error:
In template /home/luca/src/jmb-siti/www.acomea.it/web/templates/bootstrap_full.html, error at line 12
   save() got an unexpected keyword argument 'using'
   2 : {% load cms_tags menu_tags sekizai_tags %}


   3 : 


   4 : {% block central_content_left %}{% endblock %}


   5 : {% block central_content %}


   6 : <div class="span9 central_content">


   7 :     <div class="row-fluid">


   8 :         {% block central_content_central %}


   9 :         {% block central_content_central_top %}{% endblock %}


   10 :         {% block central_content_central_middle %}


   11 :         <div class="span12 central_content_central_middle"><div class="item6 height5">


   12 :              {% placeholder central_content_central_middle %} 


   13 :         </div></div>


   14 :         {% endblock %}


   15 :         {% block central_content_central_bottom %}{% endblock %}


   16 :         {% endblock %}


   17 :     </div>


   18 : </div>


   19 : {% endblock %}


   20 : {% block central_content_right %}{% endblock %}


   21 : 


   22 : {% block central_right %}{% endblock %}


Traceback:
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/luca/.buildout/eggs/django_cms-2.3.3-py2.7.egg/cms/views.py" in details
  113.     return render_to_response(template_name, context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/shortcuts/__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/loader.py" in render_to_string
  171.         return t.render(Context(dictionary))
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/base.py" in render
  140.             return self._render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/test/utils.py" in instrumented_test_render
  62.     return self.nodelist.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/loader_tags.py" in render
  123.         return compiled_parent._render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/test/utils.py" in instrumented_test_render
  62.     return self.nodelist.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/loader_tags.py" in render
  123.         return compiled_parent._render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/test/utils.py" in instrumented_test_render
  62.     return self.nodelist.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/luca/.buildout/eggs/django_classy_tags-0.3.4.1-py2.7.egg/classytags/core.py" in render
  102.         return self.render_tag(context, **kwargs)
File "/home/luca/.buildout/eggs/django_sekizai-0.6.1-py2.7.egg/sekizai/templatetags/sekizai_tags.py" in render_tag
  75.         rendered_contents = nodelist.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/loader_tags.py" in render
  62.             result = block.nodelist.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/loader_tags.py" in render
  62.             result = block.nodelist.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/loader_tags.py" in render
  62.             result = block.nodelist.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/loader_tags.py" in render
  62.             result = block.nodelist.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/loader_tags.py" in render
  62.             result = block.nodelist.render(context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/luca/.buildout/eggs/django_classy_tags-0.3.4.1-py2.7.egg/classytags/core.py" in render
  102.         return self.render_tag(context, **kwargs)
File "/home/luca/.buildout/eggs/django_cms-2.3.3-py2.7.egg/cms/templatetags/cms_tags.py" in render_tag
  235.         content = get_placeholder_content(context, request, page, name, inherit)
File "/home/luca/.buildout/eggs/django_cms-2.3.3-py2.7.egg/cms/templatetags/cms_tags.py" in get_placeholder_content
  154.         content = render_placeholder(placeholder, context, name)
File "/home/luca/.buildout/eggs/django_cms-2.3.3-py2.7.egg/cms/plugin_rendering.py" in render_placeholder
  126.     content.extend(render_plugins(plugins, context, placeholder, processors))
File "/home/luca/.buildout/eggs/django_cms-2.3.3-py2.7.egg/cms/plugin_rendering.py" in render_plugins
  80.         out.append(plugin.render_plugin(context, placeholder, processors=processors))
File "/home/luca/.buildout/eggs/django_cms-2.3.3-py2.7.egg/cms/models/pluginmodel.py" in render_plugin
  171.             context = plugin.render(context, instance, placeholder_slot)
File "/home/luca/src/jumbo2/jmb.newsletter/jmb/newsletter/cms/plugins.py" in render
  27.                 form.save(instance.mailing_list)
File "/home/luca/src/jumbo2/jmb.newsletter/jmb/newsletter/forms.py" in save
  27.             email__exact=data['email'], defaults={'email': data['email']}
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/db/models/manager.py" in get_or_create
  134.         return self.get_query_set().get_or_create(**kwargs)
File "/home/luca/.buildout/eggs/Django-1.4.3-py2.7.egg/django/db/models/query.py" in get_or_create
  452.                 obj.save(force_insert=True, using=self.db)

Exception Type: TypeError at /home/newsletter/
Exception Value: save() got an unexpected keyword argument 'using'
4

2 に答える 2

17

パラメータの完全なリストを許可せずに、表示されていないモデルsave内のの定義をオーバーライドしました。Subscriberオーバーライドされたメソッドを常にサポートし、それらを呼び出し*args, **kwargsに渡す必要があります。super()

これはこの問題の原因ではありませんが、フォームの save メソッドにも同じことが当てはまります。これは のような引数をサポートしていませんcommit。もう一度、受け入れ*args, **kwargsます。そして、間違いなくsuperここでメソッドを呼び出しますが、これは現在行っていません。

于 2013-02-01T11:22:09.420 に答える
5

saveこのように変更すると、問題が解決する場合があります

def save(self, mailing_list, *args, **kwargs):
    data = self.cleaned_data
    contact, created = Subscriber.objects.get_or_create(
        email__exact=data['email'], defaults={'email': data['email']}
    )

    mailing_list.subscribers.add(contact)
    mailing_list.unsubscribers.remove(contact)

    super(MailingListSubscriptionForm, self).save(*args, **kwargs)

ダニエルが言ったように、モデルに似たようなことをしたようです(Subscriber投稿していません)。super()まだ行っていない場合は、同様の追加を行うことをお勧めします。呼び出しは、カスタム保存コードが終了したら (または関数の開始前に)super親を呼び出すだけです。save()

于 2013-02-01T11:19:55.367 に答える