Создать пользовательский счетчик просмотров страниц в Django - PullRequest
0 голосов
/ 21 сентября 2019

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

В этих строках:

class HitCountMixin(object):
    """
    HitCountMixin provides an easy way to add a `hit_count` property to your
    model that will return the related HitCount object.
    """

    @property
    def hit_count(self):
        ctype = ContentType.objects.get_for_model(self.__class__)
        hit_count, created = HitCount.objects.get_or_create(
            content_type=ctype, object_pk=self.pk)
        return hit_count

Я не мог понять значение и использование ContentType и get_for_model(self.__class__). Кто-нибудь может мне помочь? Источник этого миксина здесь .

1 Ответ

1 голос
/ 21 сентября 2019

Поскольку HitCountMixin может наследоваться различными моделями в вашем приложении, модель HitCount должна быть каким-то образом связана с этими моделями с помощью отношения.Здесь вы можете думать о ContentType как о способе создания динамического отношения, в отличие от, например, ForeignKey, где вы обязаны использовать отношение только с одной моделью (таблицей).

get_for_model простоВспомогательный метод Django для получения экземпляра ContentType для данной модели, поскольку каждая модель (таблица) будет иметь свой соответствующий ContentType экземпляр.

В примере модели, использующей этот миксин:

class Example(models.Model, HitCountMixin):
    pass

ContentType.objects.get_for_model(self.__class__)вернет ContentType instace для модели Example

Подробнее о ContentTypes можно прочитать в Документация Django

...