J'ai essayé quelque chose comme named_scope de RubyOnRails avec Django
from django.db.models.query import QuerySet
from django.db import models 
class PlayerScopeMixin(object):
	"""
    Player Class Scope Chain Mixin
	"""
    @property
    def newcomer_time(self):
		"""
		:return:Heure de début de la période du nouveau joueur(Il y a une semaine à partir de maintenant)
		"""
       date_obj = datetime.datetime.now(utc) - datetime.timedelta(7)
       return date_obj
	def by_active(self):
		"""
Obtenez un enregistrement actif
		:return:Filtre QuerySet
		"""
		return self.filter(active_flg = True)
    def by_newcomer(self, newcomer_flg=True):
        """
Extraction d'enregistrements par jugement du nouveau joueur
		 :param limit_flg: True(Nouveau joueur) / False(非Nouveau joueur) 
        :return:Filtre QuerySet
        """
        return self.filter(created_at__gt=self.active_limit_time)
	def by_active_newcomer(self):
        """
Nouvel utilisateur actif
        """
        return self.by_active().by_newcomer()
class PlayerQuerySet(QuerySet, PlayerScopesMixin):
	"""
	PlayerQuerySet
	"""
	pass
class PlayerManager(models.Manager, PlayerScopeMixin):
	"""
	PlayerManager
	"""
	def get_query_set(self):
        return PlayerQuerySet(self.model, using=self._db)
class Player(models.Model):
	class Meta:
		app_label = 'player'
	
	active_flg = models.BooleanField(default=False)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
> Player.by_active_newcommer() == Player.by_active().by_newcomer()
        Recommended Posts