首页 > 解决方案 > Bootstrap 4 选择表单字段不适用于 django

问题描述

我是 django 新手,并在 django 中使用 bootstrap4 表单。当我使用输入字段文本日期 时,它可以正常工作并将数据保存到 django admin 但是如果我为类别添加选择,它不起作用并返回以下错误: ValueError at / The view app_budgetlist.views.home 没有返回HttpResponse 对象。它返回 None 。

我连续工作了 2 天,无法弄清楚出了什么问题!你能帮忙吗?[NB 更新了@Caleb Goodman 告诉我的代码仍然没有运气] 这是我的代码:

模型.py

from django.db import models

# Create your models here.
class Category(models.Model):
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name

class MonthlyBudget(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    budget_amount = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)

表格.py

from django import forms
from .models import MonthlyBudget

class MonthlyBudgetForm(forms.ModelForm):
    class Meta:
        model = MonthlyBudget
        fields = ['category', 'budget_amount']

视图.py

from django.shortcuts import render, redirect
from .models import Category, MonthlyBudget
from .forms import MonthlyBudgetForm 

def home(request):
    project = MonthlyBudget.objects.all()
    categories = Category.objects.all()
    if request.method == "POST":
        form =  MonthlyBudgetForm(request.POST or None)
        if form.is_valid():
            form.save()
            return render(request, 'home.html', {'project':project, 'categories':categories})
    else:
        return render(request, 'home.html', {'project':project, 'categories':categories})

主页.html

<form class="form-inline" method="POST">
                    {% csrf_token %}
                    <input type="text" name="budget_amount" class="form-control mb-2 mr-sm-2" id="budget-amount" placeholder="Amount">
                    <div class="form-group">
                            <label for="category">Select Category</label>

                            <select id="category" class="taskCategory" name="category">
                                <option class="disabled" value="">Choose a category</option>
                                {% for category in categories %}
                                    <option class="" value="{{ category.name }}" name="{{ category.name }}">{{ category.name }}</option>
                                {% endfor %}
                            </select>
                    </div>
                    <button type="submit" class="btn btn-primary mb-2">Add Project</button>
                </form>

管理员.py

from django.contrib import admin
from .models import MonthlyBudget, Category

admin.site.register(MonthlyBudget)
admin.site.register(Category)

标签: djangoformsbootstrap-4html-select

解决方案


保存表单后忘记返回响应:

def home(request):
    project = MonthlyBudget.objects.all()
    categories = Category.objects.all()
    if request.method == "POST":
        form =  MonthlyBudgetForm(request.POST or None)
        if form.is_valid():
            form.save()
            return render(request, 'home.html', {'project':project, 'categories':categories})
    else:
        return render(request, 'home.html', {'project':project, 'categories':categories})

推荐阅读