Unable to grumble: builtin.function attribute search failed

I get the error below, the error only occurs when adding the delay function to process_upload , otherwise it works without problems.

Can someone explain what kind of mistake this is, why this is happening and what recommendations to resolve?

Error:

 PicklingError at /contacts/upload/configurator/47/ Can't pickle <type 'function'>: attribute lookup __builtin__.function failed 

This view

  if request.method == 'POST': form = ConfiguratorForm(data=request.POST) # Send import to task. process_upload.delay(upload_id=upload.id, form=form) 

This is the task

 @task def process_upload(upload_id, form): upload = Upload.objects.get(id=upload_id) upload.process(form=form) 

Upload.process is in my model:

  def process(self, form): self.date_start_processing = timezone.now() import_this(data=self.filepath, extra_fields=[ {'value': self.group_id, 'position': 5}, {'value': self.uploaded_by.id, 'position': 6}], form=form) 

Full trace:

 Traceback: File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 115. response = callback(request, *callback_args, **callback_kwargs) File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 25. return view_func(request, *args, **kwargs) File "/Users/user/Documents/workspace/sms/contacts/views.py" in upload_configurator 118. process_upload.delay(upload_id=upload.id, form=form) File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/celery/app/task.py" in delay 357. return self.apply_async(args, kwargs) File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/celery/app/task.py" in apply_async 472. **options) File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/celery/app/amqp.py" in publish_task 249. **kwargs File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/kombu/messaging.py" in publish 157. compression, headers) File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/kombu/messaging.py" in _prepare 233. body) = encode(body, serializer=serializer) File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/kombu/serialization.py" in encode 161. payload = encoder(data) File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/kombu/serialization.py" in dumps 340. return dumper(obj, protocol=pickle_protocol) Exception Type: PicklingError at /contacts/upload/configurator/47/ Exception Value: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed 

forms.py

 COL_CHOICES = [ ('N/A', 'No Import'), ('first_name', 'First Name'), ('last_name', 'Last Name'), ('company', 'Company'), ('mobile', 'Mobile Number'), ('email', 'Email Address'), ] class ConfiguratorForm(forms.Form): col1 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name') col2 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name') col3 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name') col4 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name') 
+6
source share
1 answer

You do not specify a ConfiguratorForm definition, but in any case: executing async requires your task arguments to be matched, and obviously your form is not. You could go the hard way and make it selectable, but it's just a waste of time. A simple solution does not submit the form, just submit the form data (iow: request.POST.copy (), but I'm not sure if Querydict are matched) - or better, first check the form and just pass the form cleaned_data, as there is no point in processing an invalid form .

+9
source

All Articles