I have an error using get_or_create
on a queryset:
TypeError at ...
save()
got an unexpected keyword argument 'using'
This is my view:
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',)
and this is the full traceback:
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'
You've overridden the definition of save
in the Subscriber
model, which you don't show, without allowing the full list of parameters. You should always support *args, **kwargs
in overridden methods, and pass them on to the super()
call.
Although it's not the cause of this problem, the same is true of your form save method, which doesn't support arguments like commit
. Again, accept *args, **kwargs
. And definitely call the super
method here, which you're not currently doing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With