2017-03-27 10 views
0

Celery Task & Django Restフレームワークシリアライザを複数の継承で同じクラスに使用しようとしました。私はエラーを得たDRFシリアライザを使用したCelery Taskクラス

from celery import Task 
class ReceiveSerializer(Task, serializers.Serializer): 
    def run(self, source, *args, **kwargs): 
     self.save() 
    def save(self, **kwargs): 
     # call long running save method 

File "<>\serializers.py", line 217, in <module> 
    class ReceiveSerializer(Task, serializers.Serializer): 
    File "<>\workspace\www\lib\site-packages\celery-3.1.20-py2.7.egg\celery\app\task.py", line 199, in __new_ 
_ 
    tasks.register(new(cls, name, bases, attrs)) 
TypeError: Error when calling the metaclass bases 
    metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases 

保存方法は、DB内のオブジェクトの長いリスト(いくつかの倍以上5分)を作成する必要があります。私はユーザーが長い間待つことを望まない。 これを行う方法はありますか?

答えて

0

Mixinを使用することは可能でしょうか?

class YourMixin: 
    # if you want to trigger the task on save: 
    def save(self, *args, **kwargs): 
     ret = super().save(*args, **kwargs) 
     some_task.apply_async((
      self.__class__.__name__, 
      self.pk, 
     )) 
     return ret 


@task() 
def some_task(model_name, model_id): 
    my_model = apps.get_model('django_app_name.{}'.format(model_name)) 
    obj = my_model.objects.get(pk=model_id) 
関連する問題