2016-12-19 9 views
0

Im建物Django + Angular2プロジェクト。ログイン後にDjango rest framework/Angular2 buggsで単一のオブジェクトを取得

私は、現時点ではそれは私がログインしたときに、このことを、バグで働く意志/users/{{ user.id }}へのルート、サイドバーがあり、そこにSettingsを追加する必要がありますfor loopがないので

<li *ngFor="let user of users"><a routerLink="https://stackoverflow.com/users/{{ user.id }}" style="cursor: pointer">Settings</a></li> 

は表示されません任意のデータがあります。ページをリフレッシュすると、サイドバーに表示され、完璧に動作します。主なアイデアは、許可されたユーザーの設定を開くことです。

これは、私は、ユーザーを取得する方法である:

getUsers() { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    let authToken = localStorage.getItem('auth_token'); 
    headers.append('Authorization', `JWT ${authToken}`); 

    return this.http 
    .get(this.apiURL, { headers }) 
    .toPromise() 
    .then(res => res.json()); 
} 

問題は、私はDjangoフレームワークで、私は、オブジェクトをフィルタリングし、項目のリストを取得するため、forループを使用する必要があるということです。

class UserViewSet(viewsets.ModelViewSet): 

    serializer_class = UserSerializer 

    def get_queryset(self): 
     user = self.request.user 
     queryset = User.objects.filter(id=user.id) 

     return queryset 

    queryset = User.objects.filter(id=None) 

が角にfor loopを使用しないようにデータの1つのオブジェクトのみではないリストを取得する方法があります:実際に私は、現時点でログインしている唯一の、ユーザー(views.pyからコード)を得るためにそれらをフィルタリングします(多分それはバグを修正するだろう)。あるいは、あなたが私に説明して、そのことを修正する方法、設定が消えてリフレッシュ後にのみ表示されることを言うことができます。実際には、間違ったコンポーネントや間違った方法でgetUsers関数を使用していることは確かです。

マイapp.component.ts:確かに

ngOnInit(): void { 
    this.userService 
     .getUsers() 
     .then(users => this.users = users) 
} 

私にはわからないが、どこに問題と理由ログイン後のループのためのデータを持っていないので、私は、コードのどのような平和を知りませんあなたは私を助ける必要があります。より多くのコードが必要な場合は、尋ねてください。

+0

this.isSession = localStorage.getItem('auth_token'); if ((this.isSession != null) && (this.i == false)){ this.userService .getUsers() .then(users => this.users = users); this.i = true; } } 
なぜ使用しない: 'User.objects.get(ID = user.id)'?これは1つのオブジェクトだけを返します... –

+0

@Remi次にviewsetがエラーを返します '' User 'オブジェクトは反復可能ではありません – Trimidas

答えて

0

解決策が見つかりました。問題は私がngOnInit()を使用していて、ユーザーがログインしていないときに初めて読み込まれ、HTMLの空の変数に渡されてループできないことです。 現時点では、私はngDoCheck()を使ってセッションがあるかどうかを確認しています。

例:

関連する問題