2014-05-19 2 views
0

Je veux exclure les utilisateurs non-actifs de mon projet.comment exclure des utilisateurs non actifs de queryset dans django

example 1: 
    url:users/1/friends/ will show all friends of that user. 

Je veux afficher uniquement les utilisateurs actifs dans la liste d'amis.

example 2: 
    url:users/1/friends/ will show all friends of that user. 

si l'utilisateur avec id 1 n'est pas actif que je ne veux pas montrer toute activité de him..like son profil friends..his ... etc

example 3: 
    url:users/1/challenge/ will show all friends of that user in post form. 

je ne suis pas vouloir montrer les utilisateurs non-actifs dans le formulaire.

existe-t-il une façon générique d'effectuer cela. Parce que c'est un gros projet et je ne peux pas faire de filtre partout.

Les tables sont comme:

class User(models.Model): 
    ...... 
    ...... 
    friends = models.ForeignKey(User) 

Répondre

1

Si vous voulez exclure les utilisateurs non actifs d'un queryset vous pouvez utiliser le filtre suivant:

YourModel.objects.exclude(friend__is_active=False) 

# or 
YourModel.objects.filter(friend__is_active=True) 

friend est un ForeignKeyField à un modèle User objet dans YourModel.

Si vous voulez une solution plus générale, vous pouvez utiliser un ModelManager:

class ActiveUsersOnlyManager(models.Manager): 
    def get_queryset(self): 
     return super(ActiveUsersOnlyManager, self).get_queryset().filter(is_active=True) 


class User(models.Model): 
    is_active = models.BooleanField(default=true) 
    friends = models.ForeignKey(User) 
    # first manager is the default and accessible through objects. 
    objects = ActiveUsersManager() 
+0

je sais que .... je veux un générique solution de sorte que je n'ai pas besoin de filtrer le jeu de requête partout, comme vous l'avez dit ci-dessus. –

+0

merci ... mais je travaille sur le cadre de repos django et quand un formulaire est créé par le cadre de repos pour poster une requête, il affiche automatiquement toutes les entrées d'un ForeignKeyField. Le gestionnaire des moyens ne fonctionne pas à ce moment-là. –

3

Vous devez utiliser un gestionnaire de modèle personnalisé:

class ActiveUsersManager(models.Manager): 
    use_for_related_fields = True 

    def get_queryset(self): 
     return super(ActiveUserManager, self).get_queryset().filter(is_active=True) 


class User(models.Model): 
    is_active = models.BooleanField(default=true) 

    # first manager is the default and accessible through objects. 
    active = ActiveUsersManager() 
    all_users = models.Manager() 

active_users = User.objects.all()  
all_users = User.all_users.all() 
+0

merci ... mais je travaille sur le cadre de repos django et quand un formulaire est créé par le cadre de repos pour poster une requête, il affiche automatiquement toutes les entrées d'un ForeignKeyField. Le gestionnaire des moyens ne fonctionne pas à ce moment-là. –

+0

Si je comprends bien, 'use_for_related_fields = true' devrait résoudre ce problème. – Yossi