django celery 4 - ValueError:int()的基数为10的文字无效

时间:2018-03-21 00:30:37

标签: python django request task celery

我有django 1.11.5和芹菜4。

我想将用户视图传递给任务(因为我无法在tasks.py中执行此操作,对吗?)

def form_valid(self, form):
    form.instance.user = self.request.user
    dict_obj = model_to_dict(self.request.user)
    # serialized = json.dumps(dict_obj)
    # print(serialized)
    task_number_one.delay(dict_obj['username'])
    return super().form_valid(form)

在芹菜中我收到了一个错误:

ValueError: invalid literal for int() with base 10: 'my_username'

2 个答案:

答案 0 :(得分:0)

task_number_one的完整定义是什么?什么是错误的完整堆栈?

看起来传递给task_number_one的第一个参数应该是int,但用户名是一个字符串。

答案 1 :(得分:0)

您发布异常的堆栈跟踪和任务样本会很有帮助,但考虑到这一点,我认为这个错误正在发生。

  1. 你的celery任务期望第一个参数是int,我发现这有点不太可能。

  2. 您的芹菜任务是通过他们的主键搜索用户(很可能是一个int)。

  3. def task(user_id):
        user = User.objects.get(pk=user_id)
    

    如果将字符串传递给user_id,则会抛出该值错误。

    您应该更新视图以使用用户的pkid属性。

    def form_valid(self, form):
        form.instance.user = self.request.user
        task_number_one.delay(self.request.user.pk)
        return super().form_valid(form)