Игнасио прав. Модельные сигналы Django предназначены для уведомления других системных компонентов о событиях, связанных с экземплярами, и их уважаемых данных, поэтому, я думаю, это правда, что вы не можете, скажем, получить доступ к данным запроса из сигнала модели post_save
, если только эти данные запроса не были сохранены или связанный с экземпляром.
Я предполагаю, что есть много способов справиться с этим, начиная от худшего до лучшего, но я бы сказал, что это пример prime для создания класса- основанные / основанные на функции общие представления, которые автоматически будут обрабатывать это для вас.
Пусть ваши представления, которые наследуют от CreateView
, UpdateView
или DeleteView
, дополнительно наследуют от вашего класса AuditMixin
, если они обрабатывают глаголов, которые работают с моделями, которые должны быть проверены. Затем AuditMixin
может подключаться к представлениям, которые успешно создают \ обновлять \ удалять объекты и создавать запись в базе данных.
Делает совершенный смысл, очень чист, легко подключается и рождает счастливых пони. Оборотная сторона? Вы либо должны быть в выпуске выпущенной версии Django 1.3, либо вам придется потратить некоторое время, отвлекая на основе общих функций на основе функций и предоставляя новые для каждой операции аудита.
Решение может быть реализовано еще более простое с одной строкой:
static string ReplaceLastOccurrence(string str, string toReplace, string replacement)
{
return Regex.Replace(str, $@"^(.*){toReplace}(.*?)$", $"$1{replacement}$2");
}
Настоящим мы используем в своих интересах жадность regex оператора звездочки. Функция используется как это:
var s = "F:/feb11/MFrame/Templates/feb11";
var tnaName = "feb11";
var r = ReplaceLastOccurrence(s,tnaName, string.Empty);