2013-04-18 20 views
6

Tôi nhận được lỗi bên dưới, lỗi chỉ xảy ra khi tôi thêm delay vào chức năng process_upload, nếu không nó hoạt động mà không có sự cố.Không thể chọn: tra cứu thuộc tính builtin.function không thành công

Ai đó có thể giải thích lỗi này là gì, tại sao nó xảy ra và bất kỳ đề xuất nào để giải quyết?

Lỗi:

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

Đây là quan điểm

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

Đây là nhiệm vụ

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

Upload.process nằm trong mô hình của tôi:

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 dấu vết:

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

Trả lời

9

Bạn không cung cấp định nghĩa của ConfiguratorForm của bạn nhưng dù sao : thực thi không đồng bộ yêu cầu đối số của công việc của bạn có thể chọn và rõ ràng là biểu mẫu của bạn không có. Bạn có thể có thể đi một cách khó khăn và làm cho nó có thể chọn nhưng đó chỉ là một sự lãng phí thời gian. Các giải pháp đơn giản là không vượt qua biểu mẫu, chỉ chuyển dữ liệu của biểu mẫu (iow: request.POST.copy() nhưng tôi không chắc chắn Querydict là có thể chọn) - hoặc tốt hơn, đầu tiên xác thực biểu mẫu và chỉ vượt qua biểu mẫu clean_data của biểu mẫu , vì không có điểm nào trong việc xử lý biểu mẫu không hợp lệ.

+0

Không chắc chắn 100% ý bạn là gì, tôi nghĩ rằng tôi có một số đọc để làm. Tôi đã thử làm sạch các dữ liệu như đề nghị nhưng điều đó chỉ mang lại cho tôi một lỗi 'str' đối tượng không có thuộc tính 'giá trị'. – Prometheus

+0

Cập nhật câu hỏi với biểu mẫu. – Prometheus

+0

@Spike: nếu bạn không chỉ định cách bạn đã làm "thử làm sạch dữ liệu" cũng như dữ liệu bạn đã cố gắng xóa và không đăng lại dấu vết (gợi ý: tracebacks là bạn của bạn, thường xuyên hơn không chỉ đọc truy nguyên là đủ để biết - hoặc ít nhất là làm cho một giáo dục đoán về - những gì đã đi sai). Ngoài ra đây là một vấn đề khác nhau vì vậy chúng ta không cố gắng giải quyết nó ở đây. wrt/"có thể chọn", bạn có thể đọc tài liệu (Python) cho gói Pickle. –

Các vấn đề liên quan