Просмотр страницы администратора, если вошедший пользователь является администратором в Django

Я делаю проект на Django. Если пользователь является администратором, то после входа в систему администратор будет просматривать страницу профиля администратора. Но если пользователь является исследователем, то исследователь может просматривать страницу профиля исследователя после входа в систему.

django_project/settings.py

LOGIN_REDIRECT_URL = 'researcher-profile'

blog/views.py

from django.shortcuts import render
from .models import Post, Category
from django.views.generic import ListView
from django.contrib.auth.mixins import LoginRequiredMixin
from .forms import PostForm

# get all posts of the logged in user
class UserPostListView(LoginRequiredMixin, ListView):
    model = Post # query the post model to create the list of articles
    template_name = 'blog/researcher-profile.html'
    context_object_name = 'posts'
    ordering = ['-created']

    def get_queryset(self):
        return Post.objects.filter(author = self.request.user)

researcher-profile.html

{% extends 'users/base.html' %}
{% block content %}
{% for post in posts %}
{% if post.approved %}
    <div class="card mb-3">
        <img class="card-img-top" src="{{ post.image.url }}" alt="Card image cap">
        <div class="card-body">
            <h5 class="card-title">{{ post.title|truncatechars:70 }}</h5>
            <p class="card-text">{{ post.content|truncatechars:200|safe }}</p>
            <a href="{% url 'post-detail' post.aid %}" class="btn btn-primary"> See Details </a>
        </div>
        <div class="card-footer text-secondary">
            <a class="mr-2" href="{% url 'researcher-profile' %}">{{ post.author }}</a>|| 
            {{ post.created|date:"F d, Y" }}
        </div> 
    </div>
{% endif %}
{% endfor %}
{% endblock content %}

admin-profile.html

{% extends 'users/base.html' %}
{% block content %}
<h1> Admin Post Apporval Portal</h1>
<br/><br/>
{% endblock content %}

Здесь, используя код blog/views.py, пользователи могут просматривать список постов, созданных ими самими после входа в систему. Но если пользователь является администратором, то я хочу, чтобы после входа в систему он переходил на страницу профиля администратора. Как решить эту проблему?

Вы перенаправляете пользователя на нужную целевую страницу через login представление, что-то вроде:

from django.contrib.auth import authenticate, login
from django.shortcuts import redirect

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        # Redirect to a success page.
        if user.is_admin:
            return redirect('/admin/profile/')
        elif user.is_researcher:
            return redirect('/researcher/profile/')
        ...
    else:
        # Return an 'invalid login' error message.
        ...

Поскольку вы не поделились своими моделями, я просто предположил наличие в них двух полей (is_admin и is_researcher). Конечно, идеальным сценарием является наличие групп с правами доступа.

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