Как использовать возможности отчетности и статистики для записей в блоге с помощью 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 соответственно.