Определение количества обращений к объектам в день в django
В модели, подобной приведенной ниже
class Watched(Stamping):
user = models.ForeignKey("User", null=True, blank=True, on_delete=models.CASCADE)
count = models.PositiveIntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Каждый раз, когда объект извлекается, я увеличиваю атрибут count.
Теперь моя проблема заключается в том, как получить количество раз, когда объект был извлечен для каждого дня недели.
Например, WatchedObject1 будет иметь {'Sun': 10, 'Tue': 70, 'Wed': 35}
Это похоже на использование для аудита, и есть плагины для Django, которые могут помочь вам в этом. Если вы не хотите добавлять эту зависимость, вам придется создать другую модель, в которой вы будете хранить ваши предполагаемые данные.
class RetrievalOfData(models.Model):
date_of_retrieval = models.datetimefield(auto_now_add=True)
object_retrieved = models.ForeignKey("Watched")
Возможно, вы также можете переопределить менеджер, чтобы создавать эти объекты при каждом запросе модели: https://docs.djangoproject.com/en/3.2/topics/db/managers/
Возможно, вам лучше иметь отдельную таблицу WatchedModelStats
и, возможно, связать ее с вашей моделью с помощью сигналов Django. Всякий раз, когда происходит подсчитываемое событие, выполняйте что-то вроде
try:
counter = WatchedModelStats.objects.get( name=model_name, date=today)
counter.count += 1
except WatchedModelStats.DoesNotExist:
counter = WatchedModelStats( name=model_name, date=today, count=1 )
counter.save()
Одним из преимуществ является расширяемость. Вы можете легко реализовать несколько подсчетов для различных типов событий, если впоследствии возникнет такая необходимость.