【问题标题】:Django-Q and request.POST dataDjango-Q 和 request.POST 数据
【发布时间】:2021-01-22 21:45:23
【问题描述】:

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

三个位置参数是 request、budget_id 和 category_id。

我想将数据发布到我的 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})

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

14:34:39 [Q] 错误的节点或字符串格式错误:<_ast.name object at>

【问题讨论】:

    标签: python django django-q


    【解决方案1】:

    我想通了。在我的 add_automatic_expense 函数中,我将 Schedule create 更改为如下所示:

    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)
    

    【讨论】:

      猜你喜欢
      • 2015-05-09
      • 1970-01-01
      • 2022-01-08
      • 2018-07-22
      • 2012-12-04
      • 2012-02-18
      • 2022-01-15
      • 2019-09-16
      • 2012-09-18
      相关资源
      最近更新 更多