0

1 つのフィールドが 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>

ビュー.py

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

提案?

4

1 に答える 1

0

post()フォーム データを処理する関数を に追加することになりましListViewたが、有効な HttpResponse オブジェクトがないとリダイレクトに問題があり、フォームでボックスの 1 つがチェックされていないとエラーが発生します。とりあえず追加した追加の 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'))

ボックスがチェックされていない場合にエラー メッセージを表示してフォームを再レンダリングする方法について何か提案はありますか?

ありがとう

于 2013-09-05T03:02:50.093 に答える