PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Sellerie-Erhöhungsfehler beim Übergeben meines Abfragesatzes obj als Parameter

Sie müssen nur die id senden Ihrer Instanz und rufen Sie das Objekt innerhalb der Aufgabe ab. Es ist eine schlechte Praxis, die Instanz zu übergeben, da sie in der Zwischenzeit geändert werden kann , vor allem, dass Sie Ihre Aufgabe mit einer Darstellung ausführen, wie sie zu sein scheint.

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()