Bạn chỉ cần gửi id
đối tượng của bạn và truy xuất đối tượng trong nhiệm vụ. Việc chuyển đối tượng này là một cách thực hiện không tốt, vì nó có thể được thay đổi trong thời gian chờ đợi , đặc biệt là bạn đang thực hiện nhiệm vụ của mình với một lớp hoàn thiện như nó có vẻ như vậy.
views.py:
class MyModelCreateApiView(generics.CreateAPIView):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
authentication_classes = (TokenAuthentication,)
def create(self, request, *args, **kwargs):
data = dict()
data['foreign_model_id'] = kwargs['pk']
foreign_model_obj = MyForeignModel.objects.get(id=data['foreign_model_id'])
obj = MyModel.objects.create(**data)
result = serialize_query(MyModel, {"id": obj.id})
local_time = foreign_model_obj.time
my_celery_task.apply_async([foreign_model_obj.id], eta=local_time) # send only the obj id
return Response(result)
task.py:
@celery_app.task(name="my_celery_task")
def my_celery_task(mymodel_obj_id):
my_model_obj = MyModel.objects.get(id=mymodel_obj_id) # retrieve your object here
# ... updating obj attributes
mymodel_obj.save()