PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Le céleri soulève une erreur lors du passage de mon ensemble de requêtes obj en tant que paramètre

Il vous suffit d'envoyer l'id de votre instance et récupérez l'objet dans la tâche. Il est déconseillé de passer l'instance, car elle peut être modifiée entre-temps , surtout que vous exécutez votre tâche avec un affichage tel qu'il semble être.

vues.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)

tâches.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()