2017-04-13 10 views
0

次のモデルをdjangoに追加しました。私がしたかったのは、ユーザーのログインを特定のサービスにして、ログイン後にサービスのタイプに基づいて指示することでした。ユーザーは最大1つのサービスを持つことができますが、サービスは複数のユーザーを持つことができます。しかし、サービスは必ずしもユーザーを必要としません。したがって、私はユーザーモデルとの1対1の関係を作成することはできません。だから、私は2番目のテーブルを追加しました。ルックアップテーブルを使用して、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] 

私が管理エリア(ユーザーが/管理エリアを経由してログイン傾けるように、スタッフやスーパーのステータスを持っていけない)からサービスをユーザに添付することができています。今、私は、ユーザーがログインした後に問題が生じています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():missing 1必要な位置arguement 1エラー。

myservice()メソッドの実装が正しくないか、それを呼び出す方法がわかりました。

どうすればいいですか?私は基本的にはできるだけ短くしたいので、ログインしたユーザーをmyserviceに渡すと、ユーザーが関連付けられているサービスを取得する必要があります。

希望します。

答えて

1

my_serviceは何をすべきか、それともなぜリストを返すのか分かりません。また、ServiceUserのインスタンスメソッドですが、クラスメソッドとして呼び出すようです。

ユーザーからサービスに移動する場合は、関係:user.user_service.serviceに従うことができます。ビューで直接行うことができます。その方法はまったく必要ありません。

+0

ああ、関係はそうですよね?ダニエルありがとう! Lemmeはそれを撃つ。更新:魅力のように機能します!私は明らかにそれを複雑にするか、うまく読めなかった:P。ありがとう。 –

関連する問題