Просмотр профиля администратора после входа в систему вместо отображения профиля пользователя в django

Я работаю над проектом django. Есть два типа пользователей. Один - администратор, другой - исследователь. Поэтому я хочу отображать профиль администратора, когда он входит в систему, используя страницу входа, вместо профиля исследователя. Я знаю, что в django есть панель администратора. Но я хочу создать собственный профиль администратора. Таким образом, когда администратор входит в систему, используя страницу входа, созданную мной, администратор может видеть сообщения, созданные пользователями. Также он может добавить категорию, одобрить пост, удалить пост. С другой стороны, когда исследователи входят в систему, пользователи могут видеть страницу своего профиля.

blog/models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth import get_user_model
from django.urls import reverse
from ckeditor.fields import RichTextField

# Create your models here.
class Category(models.Model):
    cid = models.AutoField(primary_key=True) 
    category_name = models.CharField(max_length=100)

    def __str__(self):
        return self.category_name


class Post(models.Model):
    aid = models.AutoField(primary_key=True)
    image = models.ImageField(default='blog-default.png', upload_to='images/')
    title = models.CharField(max_length=200)
    content = RichTextField()
    created = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    cid = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='specialization')
    approved = models.BooleanField('Approved', default=False)
    like = models.ManyToManyField(get_user_model(), related_name='likes', blank=True)

    def __str__(self):
        return self.title

users/model.py

from django.db import models
from blog.models import Category
from django.contrib.auth.models import AbstractUser


# Create your models here.
class CustomUser(AbstractUser):
    cid = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='specialization', blank=True, null=True)
    profile_pic = models.ImageField(default='default_person.jpg', upload_to='profile_pics')

blog/researcher-profile.html

{% extends 'users/base.html' %}
{% block content %}
<div class="content-section">
    <div class="media">
      <img class="rounded-circle account-img" src="{{ user.profile_pic.url }}" width="125" height="125">
      <div class="media-body">
        <h2 class="account-heading" style="margin-left: 30px">{{ user.username }}</h2>
        <p class="text-secondary" style="margin-left: 30px">{{ user.email }}</p>
        <a href="{% url 'user-update' %}" class="btn btn-secondary btn-sm" style="margin-left: 30px;"> Edit Profile </a>
      </div>
    </div>
</div>
{% 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 'other-people-profile' post.author.username %}">{{ post.author }}</a>|| 
            {{ post.created|date:"F d, Y" }}
        </div> 
    </div>
{% endif %}
{% endfor %}
{% endblock content %}

blog/views.py -> Итак, это представление для исследователя. Когда исследователь войдет в систему, пользователь сможет увидеть email, фотографию профиля, имя пользователя и список постов, созданных им самим, если администратор одобрит посты.

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

User = get_user_model()

# get all posts of the loggedin user
class UserPostListView(LoginRequiredMixin, ListView):
    model = Post 
    template_name = 'blog/researcher-profile.html'
    context_object_name = 'posts' 
    ordering = ['-created']

    # return the list of items for this view only from a certain user
    def get_queryset(self):
        # return Post.objects.filter(author = self.request.user, approved=True) 
        return Post.objects.filter(author = self.request.user)
    
    def get_context_data(self, *args, **kwargs):
        cat_menu = Category.objects.all()
        context = super(UserPostListView, self).get_context_data(*args, **kwargs)
        context['cat_menu'] = cat_menu
        return context

urls.py

path('profile/', UserPostListView.as_view(), name='researcher-profile'),

Что мне нужно сделать? Нужен ли мне еще один admin-profile.html и URL для просмотра профиля администратора. И какова будет логика в файле views.py, чтобы я мог видеть профиль администратора. Обратите внимание, что я использовал представления на основе классов для представления профиля исследователя в вышеупомянутом views.py.

Это целая тема. Я рекомендую вам использовать Django Permissions и Role-Based Access. Простой поиск в google даст продуктивные учебники по этому вопросу.

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