Публикация и функция "Сохранить черновики" в Django

Я работаю над B2B-приложением на базе Django Rest Framework с React Frontend. Данные поступают из csv, а затем в React отображаются аналитические панели. Каждый аккаунт ("пользователь") является компанией - и в рамках компании приложение используется всей командой маркетологов (скажем). Каждый аккаунт компании имеет данные, уникальные для этой компании, и предпочтения приборной панели, уникальные для этой компании. Администратор - это пользователь, который является менеджером или сотрудником компании (допустим, Boeing, Nike и т.д.) и имеет права редактирования/администратора от имени компании. Этот "администратор" вносит некоторые изменения в настройки приборной панели и хочет "опубликовать" изменения, чтобы остальные сотрудники (остальная команда маркетологов) аккаунта компании могли просмотреть обновленную приборную панель. Но, возможно, это еще не так, поэтому существует функция "Сохранить черновики"

Я не уверен, как получить эти две функции наиболее стандартным для отрасли способом в Django (DRF) - Когда я нажимаю кнопку "Publish", вся команда маркетологов должна иметь возможность видеть изменения. (Это приложение для B2B). Но когда я сохраняю черновики, я должен иметь возможность просматривать изменения (как администратор), но не остальные члены маркетинговой команды. Буду благодарен за любую помощь. Спасибо!

Вы можете использовать поле выбора для управления статусом модели (в вашем случае Dashboard)

Следующий пример кода

models.py

class Dasboard(models.Model):
    STATUS_CHOICES = (('draft', 'Save Draft'), ('published', 'Published'))
    status = models.Charfield(max_length=20, choices=STATUS_CHOICES)
    # Others models fields

views.py

def dashboard(request):
    objects = None
    if request.user.is_admin:
        # The admin users can see draft and saved (all Dashboard objects)
        objects = Dashboard.objects.all()
    else:
        # Others users are seeing only published
        objects = Dashboard.objects.filter(status='published')
    return render(request, 'app_name/dashboard.html', {'objects': objects})

NB : Здесь я использовал только функции Django filter для ретривизации некоторых данных в соответствии с типом пользователей. Но вы также можете использовать Django permissions для более продвинутой обработки.

Вернуться на верх