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)
我有一个预算应用程序,我正在使用 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)