Определение количества обращений к объектам в день в 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()

Одним из преимуществ является расширяемость. Вы можете легко реализовать несколько подсчетов для различных типов событий, если впоследствии возникнет такая необходимость.

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