2013-02-01 4 views
5

Ich habe einen Fehler get_or_create auf einem queryset mit:Django QuerySet get_or_create - Typeerror - save() bekam ein unerwartetes Stichwort Argument 'mit'

Typeerror bei ... save() bekam ein unerwartetes Stichwort Argument 'mit'

das ist meine Ansicht:

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

und dies ist die vollständige Rückverfolgung:

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' 

Antwort

4

Ändern save wie dies könnte das Problem

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) 

lösen Wie Daniel sagte, es sieht aus wie Sie etwas Ähnliches wie die Subscriber Modell gemacht haben (die Sie nicht gebucht haben). Ich würde empfehlen, einen ähnlichen super() Zusatz dort zu machen, wenn Sie nicht bereits haben. Der Anruf super wird nur den übergeordneten save() aufrufen, sobald es fertig ist (oder vorher, wenn zu Beginn der Funktion), Ihren benutzerdefinierten Sicherungscode.

15

Sie haben die save im Modell Subscriber überschrieben, die Sie nicht anzeigen, ohne die vollständige Liste der Parameter zuzulassen. Sie sollten immer *args, **kwargs in überschriebenen Methoden unterstützen und sie an den Aufruf super() weiterleiten.

Obwohl dies nicht die Ursache dieses Problems ist, gilt das Gleiche für Ihre Formularspeichermethode, die Argumente wie commit nicht unterstützt. Akzeptieren Sie erneut *args, **kwargs. Und rufen Sie unbedingt die super Methode hier, die Sie gerade nicht tun.

+0

Ihre Lösung hat den Trick für mich gemacht, vielen Dank! –

Verwandte Themen