2016-11-03 8 views
1

私はInstructorモデルを持っています。このモデルは多くのフィールドからClientモデルまでです。 (Instructor.clientsModelViewSet - フィールドを選択的に非表示にしますか?

モデル:

class InstructorProfile(models.Model): 
    '''Instructor specific profile attributes 
    ''' 
    # Fields 
    office_number = models.CharField(max_length=30, blank=True, null=True) 
    location = models.CharField(max_length=30) 
    last_updated = models.DateTimeField(auto_now=True, editable=False) 

    # Relationship Fields 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, 
           related_name="instructor_profile", 
           on_delete=models.CASCADE) 

    clients = models.ManyToManyField('ClientProfile', blank=True) 

私のシリアライザは、現在、次のとおりです。私はclientsフィールドへのアクセスを防止したい

class InstructorProfileViewSet(viewsets.ModelViewSet): 
    """ViewSet for the InstructorProfile class""" 

    queryset = models.InstructorProfile.objects.all() 
    serializer_class = serializers.InstructorProfileSerializer 
    permission_classes = [permissions.IsAuthenticated] 

class InstructorProfileSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = models.InstructorProfile 
     fields = '__all__' 

とビューセットInstructorが所属するユーザー以外のすべてのユーザー(利用可能e Instructor.userモデルフィールド)。

どうすればこの問題を解決できますか?

+0

モデルクラスを表示できますか? –

+0

に講師モデルが追加されました – jramm

答えて

0

は、あなたのInstructorProfileViewSetにこれを追加します。

... 
def get_queryset(self): 
    if hasattr(self.request.user, 'instructor_profile'): 
     return models.InstructorProfile.objects.filter(user=self.request.user) 
    else: 
     return models.InstructorProfile.objects.none() 

...私が正しくあなたのInstructorProfileモデルを推測している場合。

+0

逆の外部キー検索が必要ないでしょうか?ユーザーは実際にはInstructorProfileクラスにあります。 'instructor'を 'instructor_profile'(関連する名前)に変更します。 –

+0

はい。正しい。 –

+0

編集したコメントをもう一度見てください。 - "instructor_profile" @jrammに関連する名前が挿入されています。 –

0

これを行う1つの方法は、リストメソッドを変更して、必要に応じてclient=Noneを設定することです。このようにして、レスポンス構造を保持します。

def list(self, request, *args, **kwargs): 
    queryset = self.filter_queryset(self.get_queryset()) 

    page = self.paginate_queryset(queryset) 
    if page is not None: 
     serializer = self.get_serializer(page, many=True) 
     return self.get_paginated_response(serializer.data) 

    serializer = self.get_serializer(queryset, many=True) 
    for i in serializer.data: 
     if i['user'] != request.user.pk: 
     i['client'] = None 

    return Response(serializer.data) 
関連する問題