次のモデルを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に渡すと、ユーザーが関連付けられているサービスを取得する必要があります。
希望します。
ああ、関係はそうですよね?ダニエルありがとう! Lemmeはそれを撃つ。更新:魅力のように機能します!私は明らかにそれを複雑にするか、うまく読めなかった:P。ありがとう。 –