使用对象列表的Django CBV表单

时间:2013-09-04 13:13:30

标签: python django

我正在尝试创建一个表单,其中包含一个字段为BooleanField的汽车列表。我希望它作为一个表单出现,BooleanField是一个复选框。如果用户检查了这个,那么BooleanField将被设置为True,并且当发生POST并且用户被重定向到下一页时会发生一些事情。

model.py:

class Car(models.Model):
    year = models.IntegerField()
    make = models.CharField(max_length=30)
    model = models.CharField(max_length=30)
    send = models.BooleanField(default=False)

目前 email.html 如下所示:

<form action="" method="post">{% csrf_token %}
        {% for car in object_list %}
            <input type="checkbox" name="car" id="car{{ forloop.counter }}" value="{{ car.id }}"> 
            <label for="car{{ forloop.counter }}">{{ car.year }} {{ car.make }} {{ car.model }}</label><br>
        {% endfor %}
        <input type="submit" value="Preview">
    </form>

views.py

class Email(ListView):
    model = Car 
    template_name = 'cars/email.html'

建议?

1 个答案:

答案 0 :(得分:0)

我最终向处理表单数据的post()添加了ListView函数,但是我在没有有效的HttpResponse对象的情况下重定向时出错,并且当其中一个框没有时出现错误检查表格。这是我暂时添加的附加post()代码:

def post(self, request, *args, **kwargs):
    cars = Car.objects.all()  # initially reset "self.send" field == False
    for i in range(len(cars)):
        cars[i].send = False
        cars[i].save()
    cars = Car.objects.filter(id__in=request.POST.getlist('car'))
    for i in cars:
        i.send = True
        i.save()
    return HttpResponseRedirect(reverse('cars:email_preview'))

如果没有选中框,如何使用错误消息重新呈现表单的任何建议?

由于