我在Django 1.2.4中遇到了一个奇怪的问题。
我有一个页面,允许用户声明前端设置。这些设置在以下模型中表示:
class Setting(models.Model):
"""
Maintains a key-value pair for some front-end editable setting.
"""
class Meta:
abstract = True
name = models.CharField(max_length=120, primary_key=True)
description = models.CharField(max_length=300, blank=True)
class IntegerSetting(Setting):
value = models.IntegerField()
class ListSetting(Setting):
value = PickledObjectField(default=lambda: list(), editable=True)
这些设置会反映在管理员更改表单中。我已覆盖模板,并按如下方式对页面进行设置:
{% extends 'admin/change_form.html' %}
{% block extrahead %}
<script type="application/javascript">
var global= {};
global.min_slider = {{min_slider}};
global.max_slider = {{max_slider}};
</script>
{{ block.super }}
{% endblock %}
这些值来自管理员类:
class FooAdmin(admin.ModelAdmin):
form = FooAdminForm
min_max = {'min_slider': get_setting("Min Slider Value"), 'max_slider': get_setting("Max Slider Value")}
def change_view(self, request, object_id, extra_context=None):
extra_context = extra_context or {}
extra_context.update(self.min_max)
return super(FooAdmin, self).change_view(request, object_id, extra_context)
更改设置表单上的设置后,我在管理员更改表单的任何页面加载时都看不到它已更新。但是,在重新启动开发服务器后,我看到数据就好了。
这里发生了什么?我遇到了缓存问题吗?如果它在管理界面中缓存,我怎么能只为那一页禁用它?
答案 0 :(得分:1)
问题在于您是在管理员的类级别定义这些。因此,在执行类定义时,即在进程启动时,它们会被评估。
将字典定义移动到change_view
方法本身。
答案 1 :(得分:0)
您是否在会话中保存设置?更改设置后是否更新了会话?
(这是我几天前的问题。)