Джанго отложил обновление базы данных - PullRequest
0 голосов
/ 15 февраля 2012

Я создаю приложение Django / JQuery / MySQL, где я передаю составную структуру данных 'grid' как

return render_to_response('products.html', grid)

Я рендерил 'grid' в набор элементов пользовательского интерфейса ('td', 'button', 'div' и т. Д., Инкапсулированных в HTML 'table'.

Типичный вариант использования:

  1. Пользователь нажимает на определенный элемент интерфейса в таблице
  2. Вызывается jQUery.click (), который создает внутренний тег «input» для элемента, по которому щелкнули.
  3. Пользователь может добавлять / изменять / удалять текст из элемента.
  4. При потере фокуса вызывается jQuery.blur (), который возвращает исходные свойства выбранного элемента, такие как удаление тега ввода и т. Д.
  5. jQuery.blur () также вызывает функцию AJAX, где я выполняю вызов .post для отправки измененных пользователем данных обратно на URL (функция в представлении).
  6. Видимая вызываемая функция затем фиксирует новые изменения в базе данных и возвращает событие «success» обратно на веб-страницу:

    tc_model_instance.update(tc_id=json_data['id'])
    

С помощью этого варианта использования, как вы можете видеть, изменения сразу же фиксируются в базе данных, как только пользователь вводит данные и перестает фокусироваться на конкретном элементе. Без использования транзакций БД в INNODB, как мне создать ассоциацию View-Template, чтобы любые изменения в шаблоне HTML асинхронно отражались в модели, но не обязательно записывались в базу данных.

Смежный вопрос: Если возможно, я бы также хотел создать двунаправленную ассоциацию на основе событий между отображаемым шаблоном и моими структурами данных как часть представления таким образом, чтобы любые изменения, вносимые либо в элемент пользовательского интерфейса веб-браузера, либо в данные связанного представления, всегда были синхронизированы. , Я планирую использовать AJAX для большинства целей. Не уверен, что формы будут иметь смысл в этом отношении.

Спасибо.

1 Ответ

1 голос
/ 11 апреля 2012

Возможно, вы могли бы выбросить копию объекта в карту сеанса, и все сообщения изменяют этот объект, а не напрямую в БД.Затем, когда пользователь нажимает кнопку сохранения, вы запускаете на сервере еще одну команду POST, которая затем просто вызывает сеанс ['my_object']. Save ().

Обратите внимание, что объект сеанса также сохраняетсяв БД, так что если вы пытаетесь избежать попадания в БД полностью, то, что я написал выше, не поможет.

...