Django: последний раз измененный и созданный пользователем automati c сохранение - PullRequest
0 голосов
/ 06 апреля 2020

Старый вопрос: Как я могу автоматически сохранить last_modifed_user в django моделях?

Я нашел в нескольких местах этот общий процесс, как это сделать с помощью локального потока. Я не решаюсь просто реализовать это таким образом, потому что я не совсем уверен в последствиях, которые оно имеет, и потому что все эти посты старые. django 3? Или у django3 есть лучшие варианты сделать это?

1 Ответ

1 голос
/ 06 апреля 2020

Нет, это не изменилось. Просто потому, что разделение интересов - это архитектурный принцип MVC (модель-представление-контроллер), который также определяет архитектуру Django (модель-представление-шаблон) и большинство веб-фреймворков с ORM. Модели ничего не знают о request, он недоступен (и во многих случаях вообще нет запроса при сохранении модели, подумайте о командах управления или обычных задачах, работающих в фоновом режиме).

Альтернатива локальному потоку состоит в том, чтобы убедиться, что вы реализуете его самостоятельно на уровне контроллера (слой представления в Django):

  • Создайте миксин представления, который можно смешивать со всеми родовыми c представления, использующие ModelFormMixin для сохранения пользователя в модели (ModelFormMixin.form_valid()). Или объедините его с миксином формы, где пользователь передается в форму (FormMixin.get_form_kwargs()) и сохраняется при сохранении формы (ModelForm.save()).
  • Создайте миксин ModelAdmin, который делает то же самое, когда сохранение модели на сайте администратора django.

Это, конечно, означает, что кто-то из вашей команды может забыть сделать это при создании новых видов и форм. Ссылка, которую вы разместили, содержит ответ о преимуществах и недостатках использования локальной темы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...