1

我正在尝试模拟 django 的设置文件。我已经建立了一个模型来托管一些可以由管理员更改的设置。这些概念工作正常,但是当值更改时它的行为很奇怪,代码没有接受新的更改。

这是我的 core_settings

class CoreSettings(object):
    def __getattr__(self, item):
        try:
            return Configuration.objects.get(key=item).value
        except Configuration.DoesNotExist :
            return getattr(settings, item)

core_settings = CoreSettings()

我基本上使用上面的如下

SF_PUBLICATION_PAGINATION_PP = int(getattr(core_settings, 'SF_PUBLICATION_PAGINATION_PP'))

SF_PUBLICATION_PAGINATION_PP 从配置模型中获取正确的值,但是当我更新字段值时它没有反映。仅当我更改文件导致它重新编译时,在哪里得到更改..

有任何想法吗?


更新:

似乎只有在刷新运行服务器时才能看到更改。

4

2 回答 2

2

是的,您的设置的值不会被刷新,因为它的值是在您的 settings.py 被“加载”时设置的,例如,当您在开发环境中执行“运行服务器”时会发生这种情况。

所以,你可以处理,做这样的事情:

def get_live_setting(key):
try:
    return Configuration.objects.get(key=key).value
except Configuration.DoesNotExist :
    return getattr(settings, key)

# get SF_PUBLICATION_PAGINATION_PP's value
get_live_setting('SF_PUBLICATION_PAGINATION_PP')

有了这个,你可以解决你的问题,但正确的方法是使用惰性评估,这里有一些示例,这里有一篇关于“lazy-python”的有趣帖子。

于 2013-01-03T00:49:36.130 回答
1

使用为此目的设计的包怎么样?

看一下:django-livesettings

即使您决定不使用它,您也可以随时查看它是如何完成的!


关于你的具体问题。你如何更新字段值?您确定该值是从数据库中检索的,而不是从您的except子句中检索的吗?

于 2013-01-02T18:59:05.987 回答