Как добавить аутентификацию в пользовательское представление администратора 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")