Как использовать возможности отчетности и статистики для записей в блоге с помощью django

models.py

from django.db import models
from django.contrib.auth.models import User

STATUS = (
    (0,"Draft"),
    (1,"Publish")
)


class BlogModel(models.Model):
    id = models.AutoField(primary_key=True)
    blog_title = models.CharField(max_length=200)
    blog = models.TextField()
    status = models.IntegerField(choices=STATUS, default=0)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-created_at']

    def __str__(self):
        return f"Blog: {self.blog_title}"



class CommentModel(models.Model):
    your_name = models.CharField(max_length=20)
    comment_text = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    blog = models.ForeignKey('BlogModel', on_delete=models.CASCADE)

    class Meta:
        ordering = ['-created_at']

    def __str__(self):
        return f"Comment by Name: {self.your_name}"

admin.py

from django.contrib import admin
from blog.models import BlogModel,CommentModel



class PostAdmin(admin.ModelAdmin):
    list_display = ('blog_title', 'status','created_at','updated_at')
    list_filter = ('status',)
    search_fields = ('blog_title', 'content',)

admin.site.register(BlogModel, PostAdmin)

admin.site.register(CommentModel)

Я создал простой сайт с комментариями в блоге и хочу создавать отчеты и на панели администратора я должен видеть как этого добиться. Например, сколько постов создано, сколько из них имеют комментарии, и сколько постов находятся в черновиках и опубликованы

Я проверил этот модуль, но не понимаю, как его реализовать https://pypi.org/project/django-reports-admin/

У вас уже есть большинство из этого, используя PostAdmin. Дисплей list_display уже показывает, сколько постов опубликовано/редактировано, а в списке изменений есть фильтры и для этого. Чтобы показать количество комментариев, просто добавьте это в list_display: class PostAdmin(admin.ModelAdmin): list_display = ('blog_title', 'status', 'comment_count', 'created_at', 'updated_at')

def comment_count(self, obj):
    return obj.commentmodel_set.count()
comment_count.short_description = 'Comment count'

Таким образом определяется пользовательский метод в PostAdmin, который отображает количество комментариев в виде столбца и дает ему удобное для пользователя название в качестве заголовка столбца. При желании вы можете расширить этот метод, добавив больше статистики. Админ Django очень настраиваемый.

Примечание: имена моделей должны быть в CamelCase, поэтому BlogModel и CommentModel должны быть Blog и Comment соответственно.

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