Django-Q 和 request.POST 数据

Django-Q and request.POST data

我有一个预算应用程序,我正在使用 Django 和 Django-Q。我想根据我创建的 Django-Q 计划自动创建一个 post 费用计划。我遇到的问题是理解在我的 Djano-Q 计划中使用三个位置参数的逻辑。

三个位置参数是请求,budget_id和category_id。

我想 post 数据到我的 add_automatic_expense 视图,这将根据表单数据创建一个初始费用,然后创建一个 Django-Q 计划来触发费用创建到 运行 每个月都有相同的数据。

任何人都可以帮助阐明这个过程吗?谢谢

views.py

def add_automatic_expense(request, budget_id, category_id):
get_budget = Budget.objects.get(id=budget_id)
get_category = Category.objects.get(id=category_id)
form = ExpenseEventForm()

if request.method == "POST":

    Schedule.objects.create(func='budgeteer.views.add_automatic_expense', args='request, budget_id, category_id',repeats=-1, schedule_type="D")

    form = ExpenseEventForm(request.POST)


    expense = form.save(commit=False)
    expense.amount = request.POST.get('amount')
    expense.description = request.POST.get('description')
    expense.transaction_date = request.POST.get('transaction_date')
    expense.categories_id = category_id
    expense.automatic_payment = True
    expense.save()
    expense_id = Expense.objects.last()
    get_budget.expense_set.add(expense_id)
    get_category.category_expense.add(expense_id)

    return redirect('view_expenses', budget_id=budget_id, category_id=category_id)
else:
    form = ExpenseEventForm()
return render(request, 'budgeteer/add_automatic_expense.html', {'form':form})

当我 POST 使用表单数据到该函数时,它会增加初始费用,但是当我尝试 运行 我的 QCluster 之后,我收到以下错误:

14:34:39 [Q] ERROR malformed node or string: <_ast.Name object at 0x7fa06bf2a0d0>

我明白了。在我的 add_automatic_expense 函数中,我将创建的计划更改为如下所示:

Schedule.objects.create(func='budgeteer.views.add_auto_expense', name=None, hook=None, schedule_type='O', minutes=None, repeats=-1,
    kwargs={"amount":request.POST.get('amount'), "description": request.POST.get('description'), "transaction_date":request.POST.get('transaction_date'),
    'expense_frequency_choice_field':request.POST.get('expense_frequency_choice_field'),'automatic_payment':request.POST.get('automatic_payment'), 'categories_id':request.POST.get('categories')})

然后我创建了另一个名为 add_auto_expense 的函数视图,并将 **kwargs 作为其位置值。这让我可以访问我日程表中的所有数据。

def add_auto_expense(**kwargs):
    new_expense = Expense.objects.create(amount=kwargs['amount'], description=kwargs['description'],
    transaction_date=kwargs['transaction_date'], categories_id=106)