48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
from django.contrib.contenttypes import fields as generic
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from utils.methods import get_contenttype
|
|
from utils.models import ProjectBaseMixin
|
|
|
|
|
|
class FavoritesQuerySet(models.QuerySet):
|
|
"""QuerySet for model Favorites"""
|
|
|
|
def by_object_id(self, object_id: int):
|
|
"""Filter by object_id"""
|
|
return self.filter(object_id=object_id)
|
|
|
|
def by_content_type(self, app_label, model):
|
|
"""Filter QuerySet by ContentType."""
|
|
return self.filter(content_type=get_contenttype(app_label=app_label,
|
|
model=model))
|
|
|
|
def by_user(self, user):
|
|
"""Filter by user"""
|
|
return self.filter(user=user)
|
|
|
|
|
|
class Favorites(ProjectBaseMixin):
|
|
"""Favorites model."""
|
|
|
|
user = models.ForeignKey('account.User',
|
|
on_delete=models.CASCADE,
|
|
related_name='favorites',
|
|
verbose_name=_('User'))
|
|
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
|
|
object_id = models.PositiveIntegerField()
|
|
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
|
|
|
objects = FavoritesQuerySet.as_manager()
|
|
|
|
class Meta:
|
|
"""Meta class."""
|
|
verbose_name = _('Favorites')
|
|
verbose_name_plural = _('Favorites')
|
|
|
|
def __str__(self):
|
|
"""String representation."""
|
|
return f'{self.id}'
|