2016-10-11 1 views
0

이미 개발 한 미니 reddit 프로젝트에 Django REST framework으로 작업하기 시작했습니다. DRF에서 시리얼 라이저 유효성 검사 중에 인스턴스 가져 오기

문제

내가이 상황에 붙어 있다는 것입니다 :

Minisub이 하위 Reddit 같다. 그 중에서도 이라는 필드는 ManyToMany이고 User 인 필드가 있습니다.

ManyToMany이고 Minisub 인 필드가 minisubs 인 미니 홈피에 표시되는 광고입니다. 필드도 있고 외래 키는 User입니다.

나는이 관리자가 DRF API를 통해 미니 홈피에 광고를 추가 할 수있게하고 싶습니다. 그것은 실제로 일하고 있습니다. 그러나 나는 그들이 매니저 인 곳에서만 미니 봉을 넣는 지 확인하고 싶습니다.

class AdSerializer(serializers.HyperlinkedModelSerializer): 
    # ... 

    def validate_minisubs(self, value): 
     for m in value: 
      if user not in m.managers.all(): 
       raise serializers.ValidationError("...") 
     return value 

내 질문은 :

나는 그런 방법을 발견하는 방법 user을 얻는 방법? 나는 값을 얻을 방법을 찾을 수 없습니다 Ad.author (이 필드는 자동으로 사용자 인증에 따라 직렬 데이터에 설정됩니다). 어쩌면 방법이 없기 때문에 나는 길을 찾지 못할 것입니까? 이 일을 할 곳은 다른 곳인가요?

미리 감사드립니다.

답변

1

이 작업은 permissions의 작업이라고 생각합니다. 데이터베이스에 CRUD 작업을 수행하는 경우 사용자가 관리자 인 경우 권한 클래스는 True을 반환 할 수 있습니다. http://www.django-rest-framework.org/api-guide/permissions/#custom-permissions

+0

문제는 나는 그가 관리자 것을 알고 만하지 않을 것입니다 : 자신이 관리자 인 경우

사용 권한 인스턴스는 u 사용자를 얻을 확인하는 데 사용할 수있는 요청에 액세스 할 수 있습니다 그는 그가 게시하려고하는'광고'미니 필드의 모든'MiniSub'의 관리자 다. – caymard

+0

사용자 개체에 대한 쿼리에서 파생 될 수 있습니까? 작성중인 사용자 정의 권한 클래스의 본문에 있으면 oder의 데이터베이스에서 아무 것도 찾지 않아서 'True'또는 'False'의 결론에 도달 할 수 있습니다. – Jag

+0

액세스 권한이 있으면 네, 데이터베이스에 필요합니다. 하지만, 사용자가 요청한 데이터가 합법적인지 여부를 확인하기 위해 요청에서 데이터를 deserialize해야합니다. 어쨌든'self.context [ 'request']. user'를 사용하여'validate_minisubs' 메소드에서 사용자를 얻는 방법을 발견했습니다 ([here] (http://stackoverflow.com/a/19147358/2595458). 너의 시간! – caymard

관련 문제