0

この問題は、Django チュートリアルを実行しているときに気付きます。

  1. 管理サイトで選択した投票が成功すると、管理サイトに表示されます。

管理サイトに投票が正常に作成されました

  1. に移動するmysite.com/pollsと、投票が存在しません: 「利用可能な投票はありません。」

  2. apachectl restartまたは、同じ結果を得ることができますtouch mysite/wsgi.py。つまり、新しい行が適切に表示されますmysite.com/polls

mysite.com/pollsサーバーを再起動しないと、管理サイトで新しい行が作成された直後に表示されないのはなぜですか?

urls.py からの関連コード:

from django.conf.urls import patterns, url
from django.views.generic import DetailView, ListView
from django.utils import timezone
from polls.models import Poll

urlpatterns = patterns('',
    url(r'^$',
        ListView.as_view(
            queryset=Poll.objects.filter(pub_date__lte=timezone.now) \
                .order_by('-pub_date')[:5],
            context_object_name='latest_poll_list',
            template_name='polls/index.html'),
        name='index'),
...

mysite.com/pollsviews.pyにはコードがありません。

のテンプレートコードmysite.com/polls

{% if latest_poll_list %}
    <ul>
    {% for poll in latest_poll_list %}
    <li>
        <a href="{% url 'polls:detail' poll.id %}">{{ poll.question }}</a>
    </li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

使用:

  1. ジャンゴ1.5
  2. パイソン3.3.0-3
  3. mod_wsgi 3.4-2
  4. postgresql 9.2.3-1
  5. アパッチ 2.2.24-1
  6. Linux 3.8.4-1

特記事項:

  1. Django の (1.5) 開発サーバーでの同じ動作
  2. Python 2.7 と MySQL で Django (1.5) チュートリアルを行ったときと同じ動作は以前には存在しませんでした
  3. 行はSELECT、管理サイトで作成した後、postgresql シェルから実行できます。
  4. 新しいポーリングは、次を使用して管理サイトで作成されると、シェル クライアントから読み取ることができます。django.test.client.Client
  5. を使用してシェルから新しいポーリングを作成したときdjango.test.client.Client、新しいポーリングはシェル クライアントまたは のいずれからも読み取ることができませんでしたが、サーバーの再起動前からmysite.com/polls読み取ることができました。psqlmysite.com/admin
4

1 に答える 1

0

Django のクエリセットは通常 "遅延" で評価されます。つまり、Poll.objects.filter(pub_date__lte=timezone.now).order_by('-pub_date')一度何かを書くと、それを評価する (実際にそこからデータを取得しようとする) たびに、その時点でデータが取得されます。

ただし、それを最後に追加する[:5]と、その場で評価されます。つまり、ListView に渡すものは実際にはクエリセットではなく、単なる値のリストです。ビューの作成時に一度作成され、その後再評価されることのないリスト。

目標を達成するために、メソッドをオーバーライドするカスタムListViewを作成することをお勧めします。正確な方法の詳細については、 docsを参照してください。views.pyqueryset

于 2013-03-27T19:27:30.233 に答える