Просмотр профиля администратора после входа в систему вместо отображения профиля пользователя в 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 даст продуктивные учебники по этому вопросу.