我对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 %}
答案 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