Как сделать модерацию изменения объекта? Какие django брать батарейки?

Поставили типичную (на первый взгляд) задачу.

Нужно модерировать изменения, которые вносят в объект.

Никак не могу найти батарейку, которая подходит.

Распишу ситуацию для лучшего понимания.
Возьмем пример про библиотеку.

1. Сначала создается Book с названием "Lightweight Django" и автором "Julia Elman" (исходная версия 1).

2. Посетители сайта могут просматривать список книг. Просматривать Book с названием "Lightweight Django" и автором "Julia Elman" (исходная версия 1).

3. Пользователь изменяет автора книги на "Mark Lavin" (версия 2) и для этого изменения нужна модерация от администратора.

4. До прохождения модерации от администратора посетители сайта просматривают Book с названием "Lightweight Django" и автором "Julia Elman" (исходная версия 1) без примененных изменений.

5. Администратор принимает изменения для автора Book и посетители сайта просматривают Book с названием "Lightweight Django" и измененным автором "Mark Lavin" (версия 2).

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

Есть django батарейки с такими возможностями?

В каких проектах можно посмотреть пример?

Или как такое сделать?
  • Вопрос задан
  • 492 просмотра
Решения вопроса 2
@marazmiki
Укротитель питонов
Может, django-publish поможет?
Ответ написан
sim3x
@sim3x
https://www.djangopackages.com/grids/g/versioning/

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

Или как такое сделать?


Book:
  title = text
  # some fields  
  versions = M2M(BookVersion)

BookVersion:
   title = text
   # some fields
   user_changed = FK(User)


но лучше все изменения запихнуть в json
частого обращения к версиям не будет, запись не сильно активная, постгрес уже поддерживает такие поля - поиск будет не сильно тормозной. А при росте обьемов до миллионов обьектов можно будет мигрировать на вариант више
User:
   # 

UserBookVersion:
   book = FK(Book)
   user = FK(User)
   content = jsonField()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы