2017-09-21 84 views
0

我有以下views.py:user_logged_in_handler()恰恰3個參數(2給出)在Django

from django.template import loader 
from django.http import HttpResponse 
from django.shortcuts import get_object_or_404 
from django.contrib.auth.decorators import login_required 
from student.models import CustomUser 
from student.forms import UserForm 
from django.template.context_processors import csrf 
from django.shortcuts import render_to_response 
from django.contrib.auth.signals import user_logged_in 
from .models import UserSession 

def user_logged_in_handler(sender,request,CustomUser,**kwargs): 
    UserSession.objects.get_or_create(
     user=CustomUser, 
     session_id= request.session.session_key 
     ) 
user_logged_in.connect(user_logged_in_handler) 

def delete_user_sessions(CustomUser): 
    user_sessions=UserSession.objects.filter(user=CustomUser) 
    for user_session in user_sessions: 
     user_session.session.delete() 

我有以下models.py:

class UserSession(models.Model): 
user= models.ForeignKey(settings.AUTH_USER_MODEL) 
session=models.ForeignKey(Session) 

另外,在模型。 py我有類CustomUser(AbstractUser)。當我嘗試訪問/管理什麼是錯誤的,我views.py的錯誤說/

user_logged_in_handler() takes exactly 3 arguments (2 given) 

完整的models.py如下: //models.py

from django.utils import timezone 
from django.conf import settings 
from django.contrib.auth.models import AbstractUser 
from django.utils.translation import ugettext_lazy as _ 
from django.contrib.sessions.models import Session 

class CustomUser(AbstractUser): 


    addr1= models.CharField(max_length=20) 
    addr2= models.CharField(max_length=20) 
    city= models.CharField(max_length=20) 
    state= models.CharField(max_length=20) 
    country= models.CharField(max_length=20,choices=country_choices) 
    pincode= models.IntegerField(default=0,blank=True,null=True) 
    securityq= models.CharField(max_length=20) 
    securitya= models.CharField(max_length=20) 

class userresp(models.Model): 

    uid=models.ForeignKey(settings.AUTH_USER_MODEL,blank=True,null=True) 
    resp=models.CharField(max_length=20) 
    datetime=models.DateTimeField(default=timezone.now) 

    def __unicode__(self): 
     return u"{} {}".format(self.uid,self.datetime) 

    class Meta: 
     db_table="userresp" 

class UserSession(models.Model): 
    user= models.ForeignKey(settings.AUTH_USER_MODEL) 
    session=models.ForeignKey(Session) 
+0

Django的版本? –

+0

版本1.8 ...現在 – Shefali

回答

0

正如你有CustomUser模型,需要將其註冊爲發件人。

def user_logged_in_handler(sender,request, user, **kwargs): 
    UserSession.objects.get_or_create(
     user=user, 
     session_id= request.session.session_key 
    ) 
user_logged_in.connect(user_logged_in_handler, sender=CustomUser) 

檢查更多細節Django auth signal doc

+0

它給這個錯誤...無法分配「<類的student.models.CustomUser「>」:「UserSession.user」必須是一個「CustomUser」實例。 – Shefali

+0

你可以發佈你的完整型號代碼嗎? @Shefali –

+0

我已經更新了答案。 –

相關問題