Объект не сохраняется в задании Celery - PullRequest
0 голосов
/ 04 октября 2019

Я использую celery=4.3 пакет Django и Django 2.2.6.

Я заметил, что объект не сохраняется, когда я пытаюсь обновить его из функции задачи сельдерея

@app.task
def update_object(object_id, points):
    object = MyObject.objects.get(pk=object_id)
    object.update_points(points)

Мойобъект выглядит так:

class MyObject(models.Model):
    ....

    def update_points(self, points):
        self.points += points
        self.save()

Я вызываю задачу сельдерея с: update_object.delay(object_id, points)

И это не работает: / У кого-нибудь есть предложения, почему?

1 Ответ

0 голосов
/ 04 октября 2019

вы можете попробовать с update_object.delay((object_id, points)), с параметрами как кортеж.
Обычно вам нужны pass * args и ** kwargs ( смотри этот документ )

QuickШпаргалка

T.delay(arg, kwarg=value)
    Star arguments shortcut to .apply_async. (.delay(*args, **kwargs) calls .apply_async(args, kwargs)).

T.apply_async((arg,), {'kwarg': value})

T.apply_async(countdown=10)
    executes in 10 seconds from now.

T.apply_async(eta=now + timedelta(seconds=10))
    executes in 10 seconds from now, specified using eta

T.apply_async(countdown=60, expires=120)
    executes in one minute from now, but expires after 2 minutes.

T.apply_async(expires=now + timedelta(days=2))
    expires in 2 days, set using datetime.
...