Я хочу отслеживать количество записей в базе данных. Я не хочу использовать (в моем случае) Book.objects.all().count()
. Я знаю, что это работает довольно быстро, но я не думаю, что это хороший способ. Я реализовал Tracker
класс и буду работать с этим синглтоном типом класса, если нужны цифры.
Вопрос: Использует ли post_save и post_delete медленно вниз по моему Django проекту?
по моему исходному коду
models.py
from django.db.models.signals import post_save, post_delete
from django.db import models
class Singleton(object):
_instance = None
def __new__(class_, *args, **kwargs):
if not isinstance(class_._instance, class_):
class_._instance = object.__new__(class_, *args, **kwargs)
return class_._instance
class Book(models.Model):
name = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Tracker(Singleton):
def __init__(self):
self.__count = self.__get_numbers()
def __get_numbers(self):
print("I am getting records")
return Book.objects.all().count()
@property
def count(self):
return self.__count
def update_record_count(sender, **kwargs):
tracker = Tracker()
print("Database entries: {}".format(tracker.count))
post_save.connect(update_record_count, sender=Book)
post_delete.connect(update_record_count, sender=Book)
То, что я написал выше, является действительно творческим, просто для учебных целей