Настройки не должны изменяться во время выполнения.
Это может привести к проблемам с потоками и несоответствиям, так как они загружаются при запуске каждым рабочим при инициализации, поэтому вы изменяете их в одном процессе, а другие не имеют обновленного значения.
https://docs.djangoproject.com/en/dev/topics/settings/#altering-settings-at-runtime
Редактировать
Если вам удастся сохранить эти настройки в модели данных, вы можете воспользоваться низкоуровневой системой кеширования, поэтому почти не происходит запросов, когда данные изменяются, и эти значения недействительны вручную. См https://docs.djangoproject.com/en/1.3//topics/cache/#the-low-level-cache-api.
Edit2
Вы можете добавить очень простую и общую модель настроек и управлять ею через интерфейс администратора или как угодно.
class Setting(models.Model):
name = models.CharField(max_length=100)
value = models.CharField(max_length=500)
value_type = models.CharField(max_length=1, choices=(('s','string'),('i','integer'),('b','boolean'))
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
def actual_value(self):
types = {
's': str,
'i':int,
'b': (lambda v: v.lower().startswith('t') or v.startswith('1'))
}
return types[self.value_type](self.value)
Для общесайтовых настроек: присоединение к модели сайта, для настройки конкретного пользователя, присоединение к пользователю и т. Д.
Edit3
Вы можете использовать объекты Manager для возврата списков или диктов:
class SettingManager(models.Manager):
def dict_for_object(self, object):
ct = ContentType.get_for_model(object)
pk = object.pk
return dict(self.filter(object_id=pk, content_type__id=ct.id).values_list('name', 'value'))