2013-03-18 2 views
2

У меня есть модель с GenericForeignKey. При вызове cache.set(key, trac_obj) он терпит неудачу. Интересно, является ли виновником GenericForeignKey?Django cache.set() терпит неудачу в классе с GenericForeignKey, что может быть причиной?

# models.py 
class Trac(models.Model): 

    user = models.ForeignKey(User, related_name="%(class)s", null=False) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

    class Meta: 
     unique_together = (('user', 'content_type', 'object_id'),) 

# views.py 
obj = SomeUserProfile # Django UserProfile (or any other model object) 
content_type = ContentType.objects.get_for_model(type(obj)) 
trac_obj = Trac(user=request.user, content_type=content_type, object_id=obj.pk, 
            content_object=obj) 
trac_obj.save() 
cache_key = 'Trac-{0}-{1}-{2}'.format(user.id, content_type.id, obj.id) 
cache.set(cache_key, trac_obj) 

Вот сообщение об ошибке:

File ".../python2.7/site-packages/memcache.py", line 751, in _val_to_store_info 
pickler.dump(val) 
File "/usr/lib/python2.7/copy_reg.py", line 70, in _reduce_ex 
raise TypeError, "can't pickle %s objects" % base.__name__ 
TypeError: can't pickle instancemethod objects 
+0

Я сожалею, если это глупо, но не могли бы вы показать, как создать trac_obj? –

+0

Здесь вы идете Джош, я добавил больше информации – un33k

+1

https://code.djangoproject.com/ticket/20212 – yedpodtrzitko

ответ

1

ошибка, кажется, потому что один не может непосредственно замариновать результаты метода .save(). Попробуйте настроить кеш, прежде чем сохранять объект.

Если вы должны протравить в .save(), кажется, есть способы, уточненных в ответах на этот OP: http://bytes.com/topic/python/answers/552476-why-cant-you-pickle-instancemethods

 Смежные вопросы

  • Нет связанных вопросов^_^