आपको बस id
. भेजना है अपने उदाहरण के लिए और कार्य के भीतर वस्तु को पुनः प्राप्त करें। उदाहरण को पारित करना एक बुरा अभ्यास है, क्योंकि इसे इस बीच बदला जा सकता है , विशेष रूप से यह कि आप अपने कार्य को एक प्रदर्शन के साथ समाप्त कर रहे हैं जैसा कि यह प्रतीत होता है।
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)
tasks.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()