2013-02-01 13 views
5

मैं एक क्वेरीसमूह पर get_or_create का उपयोग कर एक त्रुटि है मिल गया:Django क्वेरीसमूह get_or_create - - लेखन त्रुटि को बचाने() एक अप्रत्याशित कीवर्ड तर्क 'का उपयोग'

लेखन त्रुटि पर ... save() एक अप्रत्याशित कीवर्ड तर्क 'का उपयोग' मिला

यह मेरे विचार है:

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

बदलने से आपके 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) 

का समाधान कर सकते हैं Daniel कहा है जैसे आप Subscriber मॉडल (जो आप पोस्ट नहीं है) के लिए इसी तरह कुछ किया है, ऐसा लगता है। अगर आप पहले से नहीं हैं तो मैं एक समान super() को जोड़ने की सलाह दूंगा। super कॉल आपके कस्टम सहेजने के बाद माता-पिता save() को कॉल करने के बाद ही कॉल करेगा (या फ़ंक्शन की शुरुआत में)।

15

Subscriber मॉडल में आपने save की परिभाषा को ओवरराइड कर दिया है, जो आप नहीं दिखाते हैं, पैरामीटर की पूरी सूची के बिना। आपको हमेशा ओवरराइड विधियों में *args, **kwargs का समर्थन करना चाहिए, और उन्हें super() कॉल पर पास करना चाहिए।

हालांकि यह इस समस्या के कारण नहीं है, एक ही विधि को बचाने के लिए अपने रूप है, जो commit की तरह तर्क का समर्थन नहीं करता का सच है। फिर, *args, **kwargs स्वीकार करें। और निश्चित रूप से super विधि को कॉल करें, जिसे आप वर्तमान में नहीं कर रहे हैं।

+0

आपके समाधान ने मेरे लिए चाल बनाई, बहुत बहुत धन्यवाद! –

संबंधित मुद्दे