2017-09-14 53 views
0

一如既往,我试图改进我的Django application,我想创建一个Django模块,它可以display all logged users我的Django应用程序在线登录的用户问题

这是我的模型类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) 

然后,我有我的观点:

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) 

print query回报:[]

和一个非常简单的模板,只是为了显示登录用户:

{% block content %} 

List of logged users : 

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

{% endblock %} 

问题是:当我尝试在我的软件上连接不同的帐户时,表LoggedUser仍为空。我在剧本中犯了错误吗?

+0

为什么你的信号模型定义 – iklinac

+0

的内部连接@iklinac应该在我看来,功能设置? – Deadpool

+0

这是最好的猜测,但在他们之前删除缩进:)以便他们在课外 – iklinac

回答

1

可能是你所连接没有连接到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

我必须导入Django信号?因为'user_logged_in'没有被定义。 – Deadpool

+0

当然,你需要导入它,更新回答 – iklinac

+0

是的,它的工作原理!非常感谢 ;) – Deadpool

相关问题