0

'만들기''APIView '를 구현하고 있습니다.빈 시리얼 화기 (필드 없음)로 APIView를 생성하십시오.

FollowCreateAPIView 가 - '로그인 한 사용자됩니다 self.request.user 에서 - 얻는다'사용자의 ID ''로그인 한 사용자 ' (URL에서) 수행하고자하는 자 - 정보 위에서, 새 데이터 작성을 따르십시오! 여기

url(r'^follow/(?P<user_id>\d+)$', FollowCreateAPIView.as_view(), name="user_profile"), 

모델

class Follow(models.Model): 
    follower = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='follower') 
    following = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='following') 
    created_at = models.DateTimeField(auto_now_add=True) 

CreateAPIView (내가 URL에서 user_id를 얻을 수 print(following_id) 반환 None ) urls.py입니다

class FollowCreateAPIView(generics.CreateAPIView): 
    queryset = Follow.objects.all() 
    serializer_class = FollowCreateSerializer 

    def perform_create(self, serializer): 
     following_id = self.request.GET.get('user_id', None) 
     print(following_id) <<<<- HERE! 
     following_user = User.objects.filter(id=following_id) 
     serializer.save(follower=self.request.user, following=following_user) 

시리얼

,536,
class FollowCreateSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Follow 
     fields =() 
  • 이 문제를 해결할 수 있습니까? 그리고이 Like 기능은 매우 보편적 인 것처럼 보입니다. 더 좋은 방법이 있습니까? (있는 경우 ...)

정말 고마워요!

+0

DRF의 업데이트보기를 확인하십시오. 이미 필요한 것을 수행하는 코드가있을 것입니다. URL에있는 ID를 사용하여 모델 인스턴스를 얻거나 찾지 못할 경우 404를 반환하십시오. 하위 클래스의 나머지 논리를 사용자 정의 할 수 있습니다. – Risadinha

답변

3

나는 kwargs로 값을 얻을 수 있다고 생각합니다. 또한 id은 증분이며 고유하므로 필터 대신 get을 사용할 수 있습니다.

try: 
    following_user = User.objects.get(id=self.kwargs['user_id']) 
except User.DoesNotExist: 
    raise Http404 

감사합니다. 지적 해 주신 Risadinha.

+0

'filter()'를 사용할 수 있습니다. 'DoesNotExist' ('get()') 에러를 잡거나'None' 또는'exists()'('filter()')를 체크할지 여부에 달려 있습니다. – Risadinha

+1

이 경우,'user_id'가 발견되지 않으면'Http404를 발생시켜야합니다 '- 이것은 올바른 행동입니다. – Risadinha

+0

@Risadinha 업데이트 됨. 그 지적을위한 감사 :) –

관련 문제