0

私はジャンゴを使用しています。

私のウェブページはこのように機能します.ラジオボタンをチェックして送信をクリックすると. チェックされたラジオボタンに基づいてジョブが再定義された同じページにリダイレクトされます。私の問題はafter loading the page none of the radio buttons are checked.

送信をクリックする前にチェックされているラジオボタンをチェックしたい

コード

class MyHome(View):
    filter_options=(
        (('exp','Jobs by Experience'),
            (['l1','Less Than 1 year',0],
                ['1b2','1 to 2 Years',0],
                ['2b3','2 to 3 Years',0],
                ['3b5','3 to 5 Years',0],)),
        (('sal','Jobs by Salary'),
            (['l1000','Less Than $1000',0],
                ['1000b3000','$1000 to $3000',0],
                ['3000b5000','$3000 to $5000',0])),
        (('loc','Jobs by Location'),
            (['che','Chennai',0],
                ['ban','Banglore',0])),
    )    
    def get(self, request):
        from django.db.models import Q
        jobs=Job.objects.all().order_by("-postdate")
        c_radio=[]
        if 'exp' in request.GET:pass
        if 'sal' in request.GET:
            fl=request.GET['sal']
            c_radio.append(fl)
            if 'l' in fl:
                #return HttpResponse(fl[1:])
                q1=Q(basicpay__lte=fl[1:]) 
                self.filter_options[1][1][0][2]=1         
                jobs=jobs.filter(q1)
            elif 'b' in fl:
                jobs=jobs.filter(basicpay__range=fl.split('b'))
                self.filter_options[1][1][1][2]=1  
        if 'loc' in request.GET:
            c_radio.append(request.GET["loc"])
            jobs=jobs.filter(gmaplocation__district__icontains=request.GET["loc"])            
            #[2][1][1] ['ban', 'Banglore', 0]

        return render(request,'job/jobs.html',{"jobs":jobs,'fopts':self.filter_options,'c_radio':c_radio})   

html

{% for opts in fopts %}          
        <div class="accordion-group">
          <div class="accordion-heading emp">
            <a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse{{ forloop.counter }}"><!--item 1-->
              {{ opts.0.1 }}
            </a>
          </div>
          <div style="height: 0px;" id="collapse{{ forloop.counter }}" class="accordion-body collapse">
            <div class="accordion-inner">                  
              {% for opt in opts.1 %}
              <label class="radio">
                <input type="radio" name="{{ opts.0.0 }}" value="{{ opt.0 }}"{% ifequal opt.0.2 1 %} checked{% endifequal %}> {{ opt.1 }}{{ opt.0.2 }}
              </label>
              {% endfor %}
              <!--<label class="checkbox">
                <input type="checkbox" name="redefine"> Other
                <input type="text" name="other">
              </label>-->
            </div>
          </div>
        </div><!--/accordion-group-->
      {% endfor %}

アップデート:

これは私のために働いた:

class RedefineChoices(forms.Form):
    CHOICES_EXP=(('l1','Less Than 1 year'),
            ('1b2','1 to 2 Years'),
            ('2b3','2 to 3 Years'),
            ('3b5','3 to 5 Years'),
            )
    CHOICES_SAL=(('l1000','Less Than $1000'),
            ('1000b3000','$1000 to $3000'),
            ('3000b5000','$3000 to $5000'),
            )
    CHOICES_LOC=(('che','Chennai'),
            ('ban','Banglore'),)
    exp = forms.ChoiceField(choices=CHOICES_EXP, widget=forms.RadioSelect(),label='Jobs by Experience')
    sal = forms.ChoiceField(choices=CHOICES_SAL, widget=forms.RadioSelect(),label='Jobs by Salary')
    loc = forms.ChoiceField(choices=CHOICES_LOC, widget=forms.RadioSelect(),label='Jobs by Location')enter code here
4

1 に答える 1

1

私の理解が正しければ、表示するいくつかのオプションに基づいて、ユーザーがページのコンテンツを変更できるようにしたいと考えています。ここでjQueryが何をしなければならないかはまだわかりません。

以前にチェックボックスがオンになっているフォームを表示するには、このデータを使用してフォームをインスタンス化する必要があります。編集ビューと同じ。

たとえば、次のフォームがある場合:

from django import forms

class MyForm(forms.Form):
    choice1 = forms.BooleanField(label='Choice A')
    choice2 = forms.BooleanField(label='Choice B')
    choice3 = forms.BooleanField(label='Choice C')

ビューでは、次のようにインスタンス化します。

form = MyForm(initial={'choice1': True}

テンプレートでレンダリングする場合:

<form action="" method="post">
    {{form.as_table}}
    <input type='submit' value='Submit'>
</form>

choice1チェック済みと表示されます。

ご覧のとおり、jQuery は必要ありませんでした。

さらにいくつかのこと:以前にチェックしたボックスをビューに保存することはできません。ビューは単なる関数であり、その変数はすべてローカルです。それが何を意味するかを理解するために、Python変数のスコープを調べてください。選択を保存したい場合は、ユーザーの選択を追跡するモデルを持つか、次のようにセッションに保存できます。

if form.is_valid():
  request.session['user_choice']=form.cleaned_data

request.session['user_choice']このようにして、フォームをインスタンス化するための初期データとして使用できます。

この投稿には、jQuery を使用してチェックされたものをチェックする方法が非常によく説明されています。

とにかく、オプションごとに異なるビューを使用する方がはるかに簡単です。これにより、コードがよりシンプルになり、保守とテストが容易になります。このようにして、フォームではなくボタンを表示できます。投稿、検証、インスタンス化する必要はありません。

于 2013-06-26T08:37:16.990 に答える