Я разрабатываю простое приложение CRUD в Django.Приложение позволяет пользователям управлять списком предметов.Предположим, что один элемент в базе данных состоит из следующих полей:
- ID
- Имя
- Тип
- Описание
- Assigned_to(worker_id)
Помимо этого есть два типа пользователей - менеджеры и работники.Менеджеры могут свободно видеть / добавлять / редактировать / удалять / назначать все элементы.Работник может видеть все элементы, но любое внесенное изменение (добавление / редактирование / отмена назначения) должно быть принято менеджером.
Вот проблема.Интересно, что может быть лучшим способом для реализации этого требования.Я придумал простую систему «тикетов» - каждый раз, когда работник отправляет запрос на редактирование, тикет создается и может быть просмотрен менеджером позже.Билетом будет простой объект со следующими полями:
- Тип (добавить, изменить, отменить назначение)
- Новый идентификатор элемента (в случае операции добавления, редактирования)
- Идентификатор старого элемента (в случае операции редактирования)
Наряду с тикетом будет создан новый элемент (со всеми внесенными изменениями и дополнительным полем is_active, установленным в False).Когда менеджер принимает тикет, это происходит следующим образом:
- Операция добавления - is_active установлен в значение True
- Операция редактирования - все поля из нового элемента перезаписываются на старый элемент и новый элементудален
- Операция отмены назначения - для полей assign_to установлено значение Null
Часть, которая меня беспокоит, это, конечно, операция редактирования.Переписать все поля кажется хакерским / грязным способом сделать это (особенно, если я хотел бы добавить отношения m2m к Item).У тебя есть идея получше?