1

次の関数があります。グループと呼ばれるチェックボックスで送信された値をループし、各値をデータベースに送信します。ただし、データベースには 1 つの値しか追加されないようです。何か間違っていることでも?

グループ = 1,3,3,4

関数の更新

def add_batch(request):
    # If we had a POST then get the request post values.
    if request.method == 'POST':
        form = BatchForm(request.POST)
        # Check we have valid data before saving trying to save.
        if form.is_valid():
            # Clean all data and add to var data.
            data = form.cleaned_data
            groups = data['groups'].split(",")
            for item in groups:
                batch = Batch(content=data['message'],
                              group=Group.objects.get(pk=item),
                              user=request.user
                              )
                batch.save()
    return redirect(batch.get_send_conformation_page())

投稿変数:

groups  1, 3, 4

形:

<form action="{% url 'add_batch' %}" method="post" class="form-horizontal" enctype="multipart/form-data" >
     {% for item in groups %}
         <label class="groups">
            <input type="checkbox" name="groups" value="{{ item.id }}" /> {{item.name}}<br />
         </label>

     {% endfor %}
</form>

フォーム.py

class BatchForm(forms.Form):

    groups = forms.CharField(max_length=100)
4

1 に答える 1

2

ページに複数のチェックボックスがあり、それぞれに名前が付いているようですgroups。これで全然OKです。

このようなフォームを送信すると、パラメーターは次のようになります。

?groups=1&groups=3&groups=4

一方、フォーム定義は、グループを として定義していCharFieldます。取得した値が取り込まれrequest.GET['groups']、上記の値の 1 つだけが取得されます。

次のように定義した方がよいと思いますgroups

CHOICES = (
(0, '1'),
(1, '2'),
(2, '3'),
)

class MyForm(forms.Form):
    groups = forms.MultipleChoiceField(
            choices=CHOICES, 
            label="Groups", 
            required=False) 
于 2013-03-21T11:42:00.513 に答える