'The view budget.views.budget didn't return an HttpResponse object. It returned None instead
I recently added second form to my project and im struggling to make it work. The form is named AddIncome and when i fill the form and submit nothing happen, i don't see the new income. When i fill the income from admin panel on model page everthing works. Don't know how to make it work from main page.
Here is my view (second form that i added is b_form, a_form is working):
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.db.models import Sum
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
from django.utils import timezone
from .forms import AddIncome, AddItem
from .models import BudgetData
@login_required
def budget(request):
expense_items = BudgetData.objects.filter(user_expense=request.user).order_by(
"-date_added"
)
# Setting up pagination per expense_items
paginator = Paginator(expense_items, 10, 3) # Show 10 items per page.
page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
total_cost = BudgetData.objects.filter(user_expense=request.user).aggregate(
Sum("cost")
)
total_income = BudgetData.objects.filter(user_expense=request.user).aggregate(
Sum("income")
)
# AddItem{category, cost} form
a_form = AddItem()
b_form = AddIncome()
# form = AddItem(use_required_attribute=False) # ignores the field required text
if request.method == "POST" and "expense" in request.POST:
a_form = AddItem(request.POST)
if a_form.is_valid():
a_form = a_form.save(commit=False)
a_form.user_expense = request.user
a_form.date_added = timezone.now()
a_form.save()
return HttpResponseRedirect(reverse("budget"))
if request.method == "POST" and "income" in request.POST:
b_form = AddIncome(request.POST)
if b_form.is_valid():
b_form = b_form.save(commit=False)
b_form.user_expense = request.user
b_form.date_added = timezone.now()
b_form.save()
return HttpResponseRedirect(reverse("budget"))
return render(
request,
"budget/budget.html",
context={
"user": request.user,
"expense_items": expense_items,
"total_cost": total_cost,
"total_income": total_income,
"a_form": a_form,
"b_form": b_form,
"page_obj": page_obj,
},
)
The template section:
<section>
<div class="form-group">
<form method="post">
{% csrf_token %}
{{ b_form|crispy }}
<input name="income" type="submit" value="Add income">
</form>
</div>
<div class="form-group">
<form method="post">
{% csrf_token %}
{{ a_form|crispy }}
<input name="expense" type="submit" value="Add item">
</form>
</div>
{% for key, value in total_cost.items %}
<h1>Total expenses: {{value|floatformat:2}} zł</h1>
{% endfor %}
{% for key, value in total_income.items %}
<h1>Total income: {{value|floatformat:2}} zł</h1>
{% endfor %}
<h1>Diff: 500 zł</h1>
</section>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
