Как добавить аутентификацию в пользовательское представление администратора Django?

Я создал пользовательское представление администратора в django для одной из моделей. Но url доступен любому, кто не вошел в систему.

from django.contrib import admin
from django.urls import path
from django.shortcuts import render, redirect
from .models import Question
from django.contrib.admin.views.decorators import staff_member_required


class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question_text', 'pub_date')  # Your model fields

    def get_urls(self):
        urls = super().get_urls()
        new_urls = [path('upload-csv/',self.upload_csv),]
        return new_urls +  urls
    @staff_member_required
    def upload_csv(self,request):
        return render(request,"admin/csv_upload.html")


admin.site.register(Question,QuestionAdmin)

Я попытался добавить декоратор staff_member_required, но появляется сообщение об ошибке 'QuestionAdmin' object has no attribute 'user'

Для того чтобы сделать вид ограниченным только для stuff_member, вам не нужно добавлять украшение. Вы можете использовать admin_site.admin_view следующим образом:

from django.contrib import admin
from django.urls import path
from django.shortcuts import render, redirect
from .models import Question



class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question_text', 'pub_date')  # Your model fields

    def get_urls(self):
        urls = super().get_urls()
        new_urls = [path('upload-csv/',self.upload_csv),]
        return new_urls +  urls
    
    def upload_csv(self,request):
        return render(request,"admin/csv_upload.html")


admin.site.register(Question,QuestionAdmin)

Вы должны добавить некоторую логику, относящуюся к вашему пользователю - здесь я определил его как staffuser, но вы можете заменить его на любое имя, которое вы использовали.

Для остальных: я бы перенаправил туда, где не сотрудник должен искать!

@staff_member_required
def upload_csv(self, request):
    if request.user.get_staffuser():
        return render(request,"admin/csv_upload.html")
Вернуться на верх