django经理没有更新结果

时间:2014-07-22 09:33:38

标签: django listview django-generic-views

我对ListView和模型管理器有一个奇怪的问题: 重新加载ListView时,结果不会更新。

来自models.py的

class TicketManager(models.Manager):
  def homepage(self):
      query = "select t.id, t.plant_id from maintenance_ticket as t order by t.id desc;"
      cursor = connection.cursor()
      cursor.execute(query)
      result_list = []
      for row in cursor.fetchall():
          p = self.model(
                  id = row[0],
                  plant_id=row[1], 
          )
          result_list.append(p)
      return result_list

class Ticket(models.Model):
  plant = models.ForeignKey(Impianto,verbose_name=_("Plant"))
  objects = TicketManager()
来自views.py的

class TestTicketList(AclMixin,ListView):
    model = Ticket
    queryset = Ticket.objects.homepage()
    paginate_by = 25
    template_name = 'maintenance/skel_list.html'

前提:

python manage.py shell一切正常:

len(Ticket.objects.homepage())

始终返回正确的数字。

问题:

当我通过python manage runserver(或通过带有“modwsgi”的网站)查看结果时,结果只是第一次正确。

当我创建一个新的Ticket实例(通过sql,通过shell,通过网络服务器)时,ListView响应不会更新,所以我总是得到第一次运行的Ticket列表。

似乎查询结果有点“缓存”。

在其他地方,在同一个项目中,我使用非常相似的模型管理器,具有非常相似的Listviews。

- 已编辑 - 模板没用:它可以在任何地方使用。

{% extends 'maintenance/base.html' %}
{% block mainbody %}
<table>
{% for item in object_list %}
<tr><td>{{item}}</td></tr>
{% endfor %}
</table>
{% endblock %}

1 个答案:

答案 0 :(得分:1)

我不明白为什么,但是:

从ListView类中删除queryset

class TestTicketList(AclMixin,ListView):
    model = Ticket
    ### queryset = Ticket.objects.homepage()
    paginate_by = 25
    template_name = 'maintenance/skel_list.html'

并添加一个只返回查询集的方法:

def get_queryset(self):
    return Ticket.objects.homepage()

似乎解决了这个问题。

--- pip freeze returns: ----
Django==1.6.5
Pillow==2.4.0
PyPDF2==1.20
South==0.8.4
Werkzeug==0.9.4
amqp==1.4.5
anyjson==0.3.3
billiard==3.3.0.16
celery==3.1.9
django-bootstrap-toolkit==2.15.0
django-celery==3.1.9
-e git+https://github.com/theatlantic/django-chosen.git@3a912f73daf1091c07e10d76348b325491c20846#egg=django_chosen-master
django-debug-toolbar==1.0.1
django-email-templates==0.1
django-excel-response==1.0
django-excel-view==1.0
django-extensions==1.3.3
django-pyodbc==0.2.3
django-rosetta==0.7.4
django-stdimage==0.4.2
django-tables2==0.15.0
djorm-ext-pgbytea==0.5.0
html5lib==1.0b3
kombu==3.0.15
phpserialize==1.3
polib==1.0.4
pyodbc==3.0.7
pytz==2013.9
reportlab==3.0
six==1.6.1
sqlparse==0.1.11
xhtml2pdf==0.0.5
xlwt==0.7.5