Перенаправить на создание модели, если она не выходит - PullRequest
0 голосов
/ 27 октября 2019

Когда я вхожу в django с правами суперпользователя, если объект какой-либо модели или поле последнего объекта в этой модели не существует или не задан, как мне перенаправить на создание этой модели? И не позволите мне получить доступ к WebApp, если оно не создано?

Я предполагаю, что есть функция, которая запускается всякий раз, когда суперпользователь входит в систему и проверяет наличие объекта или поля в последнем объекте. Я просто не знаю, как сделать эту функцию и где ее поставить.

РЕДАКТИРОВАТЬ: Действительно извините, я не стал более подробно развивать свой вопрос.
- Я хочу проверить наличие объекта, КОГДА суперпользователь входит в веб-приложение, а не когда он нажимает на модель из индекса. Объект ДОЛЖЕН БЫТЬ существовать, поэтому, когда он не существует и суперпользователь входит в систему, его нужно добавить для добавления формы и запретить использовать остальную часть сайта, пока объект не существует. Поэтому, когда кто-то входит на сайт администрирования Django, я хочу запустить функцию, которая проверяет существование этой модели и перенаправляет или нет, соответственно.

Спасибо, что уделили нам время на чтение.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Вы можете использовать сигнал для запуска функции после точки входа пользователя в систему

from django.contrib.auth.signals import user_logged_in
from django.dispatch import receiver


@receiver(user_logged_in)
def superuser_login(sender, user, request, **kwargs):
    if user.is_superuser:
        # Do stuff here
0 голосов
/ 27 октября 2019

В вашем администраторе вы можете переопределить change_view примерно так:

class MyModelAdmin(admin.ModelAdmin):
    ... your admin declaration
    def change_view(self, request, object_id, form_url='', extra_context=None):
        try:
            MyModel.object.pk(pk=object_id)
            return super().change_view(request, object_id, form_url=form_url, extra_context=extra_context):
        except MyModel.DoesNotExist:
            return redirect('admin:yourapp_yourmodel_add')

Это не оптимизировано для sql, так как _changeform_view повлияет на ваш экземпляр agin, но это самое простое решение.

...