如何使用查找表使用django

时间:2017-04-13 15:38:22

标签: python django

我在django中有以下模型。我想做的是让用户登录特定服务并在登录后根据服务类型指导他/她。用户可以拥有最多一项服务,但服务可以拥有多个用户。但是,服务不一定需要用户。因此,我无法与用户模型建立一对一的关系。所以,我添加了第二张表。

我想要的是在用户登录后获取服务的详细信息(ID,名称和服务类型),以便我可以根据类型重定向到右侧视图。

class Service(models.Model):

SERVICE_TYPE = (
('Local', 'Local'),
('External', 'External'),
)

name=models.CharField(max_length=50, unique=True)
serviceNature=models.CharField(max_length=25,choices=SERVICE_TYPE,default='Local')

def __str__(self):
    return self.name

class Meta:
    ordering=('name',)


class ServiceUser(models.Model):
'''
 User to Service
'''
 service=models.ForeignKey(Service,related_name='service_user',on_delete=models.CASCADE)
  user=models.OneToOneField(User,related_name='user_service',on_delete=models.CASCADE,unique=True)

def __str__(self):
    return self.user.username + ', ( ' + self.user.first_name + '), ' + self.service.name

class Meta:
    ordering=('service','user')

def myservice(self,user):
  #for the given user, return the service name and type, if exists. I failed to attach it here correctly here.
    return [self.service.id,self.service.name,self.service.serviceNature]

我能够从管理区域为用户附加服务(用户没有员工或超级状态,因此他们无法通过/ admin区域登录)。现在我在用户登录后遇到问题。在views.py中,我有以下登录信息(我已跳过明显的导入以节省空间):

def login_user(request):
#if form is submitted
form = LoginForm(request.POST or None)
logout(request)
if request.method == 'POST':
    #will handle the request later
    username = request.POST['login_email']
    password = request.POST['login_pwd']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            #get the department of the user
            departmentInfo=ServiceUser.myservice(request.user)
            if len(departmentInfo)>0:
                #get the service name and type
                return HttpResponse('You are logged in to ' + str(departmentInfo[0]) + ' ' + departmentInfo[1])
            else:
                form=LoginForm(request.Post)
        else:
            form=LoginForm(request.Post)


else:
    form=LoginForm(request.POST)


#returning form 
return render(request, 'base.html', {'form':form});

现在它给了我错误:

myservice():缺少1个必要的位置争论1错误。

我知道myservice()方法的实现不正确或者我调用它的方式。

我该怎么做?我基本上想让它尽可能短,所以如果我将登录用户传递给myservice,我需要获得用户所关联的服务。

希望它有意义。

1 个答案:

答案 0 :(得分:1)

我不明白my_service应该做什么,或者为什么它会返回一个列表。此外,它是ServiceUser上的实例方法,但您似乎将其称为类方法。

如果您想从用户转到服务,您可以关注关系:user.user_service.service。您可以直接在视图中执行此操作;根本不需要那种方法。