0

学生が選んだカテゴリに応じたすべてのオブジェクトを表示するページがあります。オブジェクトを異なるページに分割するために、サイトにページネーションを実装しました。

この問題は、学生がドロップボックスからカテゴリを選択し、新しいエントリと古いエントリのページネーションをフリックしようとしたときに発生します。

ここに画像の説明を入力

これが発生する理由は、ユーザーがドロップボックスからカテゴリを選択するたびに、オブジェクトを取得するとドロップボックスがリセットされるためです。そのため、ユーザーがページネーションを使用してオブジェクトをフリックしようとすると. ドロップボックスのカテゴリがリセットされ、ユーザーが空白のページにリダイレクトされるため、ページネーションは取得するデータを認識していません。

これに対する解決策は、ドロップボックスがユーザーの選択に対して静的なままになるようにプログラムすることです。これにより、ユーザーがページネーションによって分割されたデータをフリックすると、ページネーションがドロップボックスに従ってオブジェクトを取得できることがわかります。

ユーザーの選択に対してこのドロップボックスを静的なままにする方法がわかりません。

私のviews.py

def BoardFinder(request):
    form = BoardFinderForm(request.POST)
    fo = BoardFinderForm()
    if form.is_valid():
        Category = form.cleaned_data['Category']
        posts = Board.objects.filter(Category=Category)
        paginator = Paginator(posts, 1)

        try: page = int(request.GET.get("page", '1'))
        except ValueError: page = 1

        try:
            posts = paginator.page(page)
        except (InvalidPage, EmptyPage):
            posts = paginator.page(paginator.num_pages)
        return render(request,"boardfinder.html",{"posts":posts,"fo":fo})
    return render(request,"boardfinder.html",{"fo":fo})

私のモデル.py

class Board(models.Model):
    MATH = 'MATH'
    ENGLISH = 'ENGLISH'
    SCIENCE = 'SCIENCE'
    LANGUAGE = 'LANGUAGE'
    CATEGORY = (
        (MATH, 'Math'),
        (ENGLISH, 'English'),
        (SCIENCE, 'Science'),
        (LANGUAGE, 'Language'),
    )
    Category =models.CharField(max_length=30,choices=CATEGORY)
    user = models.ForeignKey(User)
    name = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)
    picture = models.OneToOneField('Picture',related_name='picture',blank=True,null=True)
    def __unicode__(self):
        return self.name

class BoardFinderForm(forms.ModelForm):
    class Meta:
        model = Board
        fields = ('Category',)

私のboardfinder.htmlの重要な部分

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



            {% for post in posts.object_list %}
                <div class="title">{{ post.name }}</div>
                {% endfor %}
4

1 に答える 1

0
<form method="GET">
    <p><select name="category">
        <option value="" 
            {% if not request.session.category %}selected{% endif %}>
            (All subjects)
        </option>

        <option value="ENGLISH" 
            {% if request.session.category == "ENGLISH" %}selected{% endif %}>
            English
        </option>

        <option value="LANGUAGE"
            {% if request.session.category == "LANGUAGE" %}selected{% endif %}>
            Language
        </option>

        <option value="MATH"
            {% if request.session.category == "MATH" %}selected{% endif %}>
            Math
        </option>

        <option value="SCIENCE"
            {% if request.session.category == "SCIENCE" %}selected{% endif %}>
            Science
        </option>
    </select></p>

    <input type = "submit" value= "Find WhiteBoard" />
</form>

def BoardFinder(request):
    category = request.GET.get('category')
    if category:
        request.session['category'] = category
        posts = Board.objects.filter(Category=category)
        paginator = Paginator(posts, 1)

        try: page = int(request.GET.get("page", '1'))
        except ValueError: page = 1

        try:
            posts = paginator.page(page)
        except (InvalidPage, EmptyPage):
            posts = paginator.page(paginator.num_pages)
        return render(request,"boardfinder.html",{"posts":posts,"fo":fo})
    return render(request,"boardfinder.html",{"fo":fo})
于 2013-03-23T12:34:35.233 に答える