2

関数の構造に問題があります。

私の関数は2つのフォームをレンダリングします。ホワイトボードのプライマリ画像を変更するためのフォームと、特定のホワイトボードから画像を削除するためのフォーム

どちらのフォームにも、生徒が選択するすべてのホワイトボードと、生徒がホワイトボードを選択するタイミングを一覧表示するドロップボックスが表示されます。すべてのオブジェクトが表示されます。ホワイトボードのプライマリ画像を設定するフォームは、すべての画像オブジェクトを表示するため完全に機能しますが、画像の削除の下にあるドロップボックスから値を選択すると、この関数は、画像の削除ヘッダーの下にあるすべての画像オブジェクトを返すのではなく、プライマリフォームの下にあるすべての画像を表示します。

ここに画像の説明を入力してください 問題はmyifforms.is_valid():とmy if forms.is_valid():にあると思います。これは、フォームが送信されたときだからです。それはifforms.is_valid()にのみPOSTを取得します:

私のviews.py

 def WhiteBoardEditor(request):
    if not request.user.is_authenticated():
    return HttpResponseRedirect(reverse('world:LoginRequest'))
picture = {}
pict = {}

if request.method == "POST":
        forms = BoardPictureForm(request.user,request.POST,)
        formss = PictureDeleteForm(request.user,request.POST,)

        if forms.is_valid():
            board = forms.cleaned_data['board']
            if board:
                boards = forms.cleaned_data['board']
                picture = Picture.objects.filter(board=boards)
        return render(request,'boardeditor.html',{'picture':picture,'boardpicture':BoardPictureForm(request.user),'picturedelete':PictureDeleteForm(request.user)})
        if formss.is_valid():
            pooh = formss.cleaned_data['board']
            if pooh:
                pooh = formss.cleaned_data['board']
                pict = Picture.objects.filter(board=pooh)
        return render(request,'boardeditor.html',{'pict':pict,'boardpicture':BoardPictureForm(request.user),'picturedelete':PictureDeleteForm(request.user)})


return render(request,'boardeditor.html',{'boardpicture':BoardPictureForm(request.user),'picturedelete':PictureDeleteForm(request.user)})

私のboardeditor.html

 <h1> Set a primary picture for a whiteboard</h1>

 <form method="POST" enctype="multipart/form-data">
     {% csrf_token %}
    {{ boardpicture.as_p }}
    <input type = "submit" value= "save" />
 </form>

      {% for p in picture %}
 <li><a href ="{% url world:delpic p.id 1 %}">{{p.description}}</a>
 {% endfor %}





 <h1> Delete picture from whiteboard</h1>

 <form method="POST" enctype="multipart/form-data">
     {% csrf_token %}
    {{ picturedelete.as_p }}
    <input type = "submit" value= "save" />

 </form>

 </form>
 {% for pi in pict %}
 { pi.description }}
 {% endfor %}

私のforms.py

 class BoardPictureForm(forms.ModelForm):

    def __init__(self, user, *args, **kwargs):
            super(BoardPictureForm, self).__init__(*args, **kwargs)
            self.fields['board'].queryset = Board.objects.filter(user=user)

class Meta:
    model = Picture 
    fields = ('board',)

 class PictureDeleteForm(forms.ModelForm):

    def __init__(self, user, *args, **kwargs):
            super(PictureDeleteForm, self).__init__(*args, **kwargs)
            self.fields['board'].queryset = Board.objects.filter(user=user)

class Meta:
    model = Picture 
    fields = ('board',)
4

2 に答える 2

1

Edit2:ああ、私はこの質問を誤解しました-以下は質問に関連していませんが、それでもOPには役立ちます

整形式のHTMLを生成していないことが原因だと思います。boardeditor.htmlの「画像」の部分を次のように変更してみてください

<ul>
{% for p in picture %}
    <li><a href="{% url world:delpic p.id 1 %}">{{p.description}}</a></li>
{% endfor %}
</ul>

編集:また、

{% for pi in pict %}
    {{ pi.description }} <!-- added an opening curly brace -->
{% endfor %}

</form>そして、あなたは底に向かって冗長性を持っています

于 2013-03-27T06:38:26.743 に答える
1

2つのフォームは、である同じフィールドを使用しますboard。そのため、2番目のフォームを送信すると、最初のフォームが1つのプロセスになります。

問題を解決するには、すべてのフォームでアクションを指定する必要があります。私の答えでは、プロセス値を使用して非表示形式で入力を追加していることに注意してください。そして、あなたの見解では、フォームを送信するときにシステムがどのフォームを実行する必要があるかを認識できるように、そのプロセスのifandelseステートメントを作成します。

if request.method == "POST":
    forms = BoardPictureForm(request.user,request.POST,)
    formss = PictureDeleteForm(request.user,request.POST,)

    if request.POST['process'] == 'primary':
        if forms.is_valid():
            board = forms.cleaned_data['board']
            if board:
                boards = forms.cleaned_data['board']
                picture = Picture.objects.filter(board=boards)
        return render(request,'boardeditor.html',{
            'picture':picture, 
            'boardpicture':BoardPictureForm(request.user), 
            'picturedelete':PictureDeleteForm(request.user)
        })
    elif request.POST['process'] == 'delete':
        if formss.is_valid():
            pooh = formss.cleaned_data['board']
            if pooh:
                pooh = formss.cleaned_data['board']
                pict = Picture.objects.filter(board=pooh)
        return render(request,'boardeditor.html',{
            'pict':pict, 
            'boardpicture':BoardPictureForm(request.user), 
            'picturedelete':PictureDeleteForm(request.user
        )}

    elif request.POST['process'] == 'third':
        //other form here

<h1> Set a primary picture for a whiteboard</h1>

 <form method="POST" enctype="multipart/form-data">
     {% csrf_token %}
    {{ boardpicture.as_p }}
    <input type = "hidden" name="process" value= "primary" />
    <input type = "submit" value= "save" />
 </form>

      {% for p in picture %}
 <li><a href ="{% url world:delpic p.id 1 %}">{{p.description}}</a>
 {% endfor %}


 <h1> Delete picture from whiteboard</h1>

 <form method="POST" enctype="multipart/form-data">
     {% csrf_token %}
    {{ picturedelete.as_p }}
    <input type = "hidden" name="process" value= "delete" />
    <input type = "submit" value= "save" />

 </form>

 </form>
 {% for pi in pict %}
 { pi.description }}
 {% endfor %}
于 2013-03-27T06:40:08.557 に答える