2

以下の例でわかるように、検証前にフィールド値「user」をビューに設定しようとしています。しかし、まだ設定されていないことを示唆する検証メッセージ user is required が表示されます。私は何を間違っていますか?

ありがとう、

view.py

def add_batch(request):
    # If we had a POST then get the request post values.
    if request.method == 'POST':

        form = BatchForm(data=request.POST, initial={'user': request.user})
        # 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['content'],
                              group=Group.objects.get(pk=item),
                              user=request.user
                              )
                batch.save()
            return redirect(batch.get_send_conformation_page())
        else:
            context = {'form': form}
            return render_to_response('sms/sms_standard.html', context, context_instance=RequestContext(request))

フォーム.py

class BatchForm(forms.ModelForm):

    class Meta:
        model = Batch

    def __init__(self, user=None, *args, **kwargs):
        super(BatchForm, self).__init__(*args,**kwargs)
        if user is not None:
            form_choices = Group.objects.for_user(user)
        else:
            form_choices = Group.objects.all()
        self.fields['groups'] = forms.ModelMultipleChoiceField(
            queryset=form_choices
        )
4

2 に答える 2

5

ドキュメントで説明されているように、値initialはフォームにデータを設定するために使用されるのではなく、初期値を表示するためにのみ使用されます。

ユーザーを表示したくないが自動的に設定したい場合は、ModelForm からユーザー フィールドを完全に除外し、保存時にビューに設定することをお勧めします。または、他の理由でパラメーターとして渡しているため、おそらくそれを POST データに追加できます。

def __init__(self, user=None, *args, **kwargs):
    super(BatchForm, self).__init__(*args,**kwargs)
    if user is not None:
        if self.data:
            self.data['user'] = user
于 2013-03-22T11:41:47.840 に答える
0
form = BatchForm(request.user, request.POST)
# Check we have valid data before saving trying to save.
if form.is_valid():
    [.........]
于 2013-03-22T11:32:41.223 に答える