2017-09-14 1 views
0

Comme toujours, j'essaie d'améliorer mon Django application et je voudrais créer un module Django qui pourrait display all logged users.Problème avec les utilisateurs connectés en ligne dans mon application Django

C'est ma classe de modèle LoggedUser:

class LoggedUser(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 

    def __unicode__(self): 
     return self.user.username 

    def login_user(sender, request, user, **kwargs): 
     LoggedUser(user=user).save() 

    def logout_user(sender, request, user, **kwargs): 
     try: 
      u = LoggedUser.objects.get(user=user) 
      u.delete() 
     except LoggedUser.DoesNotExist: 
      pass 

    user_logged_in.connect(login_user) 
    user_logged_out.connect(logout_user) 

Ensuite, j'ai à mon avis:

def ConnectedUsers(request) : 

    logged_users=[user.user for user in LoggedUser.objects.all()] 
    print logged_users 

    context = { 
     "logged_users":logged_users, 
    } 

    return render(request, "UtilisateursConnectes.html", context) 

Les print query retours: []

et un modèle très simple juste pour pour afficher les utilisateurs connectés:

{% block content %} 

List of logged users : 

    {% for users in logged_users %} 
     <li>{{ users }}</li> 
    {% endfor %} 

{% endblock %} 

Le problème est: Lorsque j'essaie de connecter un compte différent sur mon logiciel, la table LoggedUser est toujours vide. Est-ce que je fais une erreur dans mon script?

+0

Pourquoi le signal se connecte à l'intérieur de la définition du modèle – iklinac

+0

@iklinac Il doit être réglé dans ma fonction de vue? – Deadpool

+0

Ceci est au mieux conjecture mais supprime l'indentation devant eux :) de sorte qu'ils sont en dehors de la classe – iklinac

Répondre

1

probablement votre Connects ne sont pas connectés aux signaux Django

from django.contrib.auth.signals import user_logged_in, user_logged_out 

class LoggedUser(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 

    def __unicode__(self): 
     return self.user.username 

def login_user(sender, request, user, **kwargs): 
     LoggedUser(user=user).save() 

def logout_user(sender, request, user, **kwargs): 
     try: 
      u = LoggedUser.objects.get(user=user) 
      u.delete() 
     except LoggedUser.DoesNotExist: 
      pass 

user_logged_in.connect(login_user) 
user_logged_out.connect(logout_user) 
+0

Je dois importer le signal Django? Parce que 'user_logged_in' n'est pas défini. – Deadpool

+0

bien sûr, vous devez importer, mis à jour la réponse – iklinac

+0

Oui cela fonctionne! Merci beaucoup ;) – Deadpool