2015-05-13 5 views
1

Я смотрю состояние изоляции/чтения только в Django (1.6), и я ищу способ сделать запрос возвращать объекты, которые являются неизменяемыми.Вопрос о неизменяемой модели Django

Я ищу, чтобы соответствовать что-то вроде следующего обертывания обычного дб атомарности апите

MyModel.objects.filter(foo="bar").all(read_only=True) 

Моего текущее мышление это будет пользовательским менеджером, но я бы потенциально как-то, что может быть добавлено в во время выполнения, как:

read_only(MyModel.objects.filter(foo="bar").all()) 

Без слишком много вуду или сделать их неуправляемыми (вариант бросить исключение на изменение состояния будет хорошо).

Главное, чтобы модель поддерживала как режим чтения, так и тип запроса на чтение и запись по умолчанию в идеале с изменениями, ограниченными для кода, который требуется для чтения только для чтения.

Мой другой вариант что-то вроде:

with isolation(raise_exception=True): 
    m = MyModel.objects.get(id=foo) 
    m.do_unknown_thing_that_may_mutate() 

Есть ли существующие решения я отсутствующими на более высоком уровне, чем в базе данных?

ответ

1

Одним из возможных вариантов может быть определение прокси-класс, который переопределяет save не быть не-оп:

class MyReadOnlyModel(MyModel): 
    def save(self, *args, **kwargs): 
     pass 
    class Meta: 
     proxy = True 

Тогда просто запрос MyReadOnlyModel вместо MyModel.

+0

Да, это хороший вариант, поскольку существуют (некоторые) прокси-модели, используемые для косвенности в том виде, в каком они стоят, а также сохраняли бы усилия по рефакторингу по запросам. +1 –

+0

Мое общее требование может быть ошибочным на уровне объекта/модели, однако, поскольку я хочу, чтобы все изменения состояния вообще отображались в графике вызовов из заданного корня, что может означать контекст, который скрывает транзакцию в конец :( –

Смежные вопросы