2017-01-18 2 views
0

모든 객체를 가져올 때 오류가 발생합니다.Django Rest Framework에서 get을 사용하여 호출 할 때 __init __()에 예상치 못한 키워드 인수 'context'가 있습니다.

class Message(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 

    type = models.CharField(_('type'), choices=MESSAGE_TYPE, default='Invitation', max_length=100) 
    content = models.TextField(_('content'), blank=False) 
    sender = models.ForeignKey(User, related_name='sender_message', verbose_name=_("Sender"),) 
    recipient = models.ForeignKey(User, related_name='receiver_message', null=True, blank=True, 
            verbose_name=_("Recipient")) 
    url_profile_image = models.URLField(_('url_profile_image'), max_length=500, blank=True, default='') 

    class Meta: 
     ordering = ('created',) 

내 시리얼 :

class MessageSerializer(serializers.HyperlinkedIdentityField): 

    class Meta: 
     model = Message 
     fields = ('url', 'id', 'type', 'content', 'Sender', 'Recipient', 'url_profile_image') 

내보기 : 내 그래서 모델 썼다

class MessageViewSet(viewsets.ModelViewSet): 
    queryset = Message.objects.all() 
    serializer_class = MessageSerializer 

을 나는 메시지의 그런 종류를 "만들"수 있어요 django-admin에서. 그러나 나는 그것들을 얻을 수 없다. 창조 될 때 끝점을 부추 긴다.

이 전체 오류입니다 :

Internal Server Error: /users/messages/ 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py", line 39, in inner 
    response = get_response(request) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/django/views/decorators/csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/viewsets.py", line 83, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/views.py", line 477, in dispatch 
    response = self.handle_exception(exc) 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/views.py", line 437, in handle_exception 
    self.raise_uncaught_exception(exc) 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/views.py", line 474, in dispatch 
    response = handler(request, *args, **kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/mixins.py", line 47, in list 
    serializer = self.get_serializer(queryset, many=True) 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/generics.py", line 111, in get_serializer 
    return serializer_class(*args, **kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/relations.py", line 112, in __new__ 
    return cls.many_init(*args, **kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/relations.py", line 132, in many_init 
    list_kwargs = {'child_relation': cls(*args, **kwargs)} 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/relations.py", line 406, in __init__ 
    super(HyperlinkedIdentityField, self).__init__(view_name, **kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/relations.py", line 282, in __init__ 
    super(HyperlinkedRelatedField, self).__init__(**kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/rest_framework/relations.py", line 106, in __init__ 
    super(RelatedField, self).__init__(**kwargs) 
TypeError: __init__() got an unexpected keyword argument 'context' 
[18/Jan/2017 10:39:21] "GET /users/messages/ HTTP/1.1" 500 17769 

답변

3

귀하의 시리얼은 시리얼 라이저, 당신은 필드에서 상속하고이 아니다.

class MessageSerializer(serializers.HyperlinkedIdentityField): 

당신은 ModelSerializer

class MessageSerializer(serializers.ModelSerializer): 
+1

감사합니다 사용한다! 작동합니다. 또한 "보낸 사람"과 "받는 사람"에게 serializer의 "보낸 사람"과 "받는 사람"을 변경해야합니다. 하지만 이제는 잘 작동합니다. "HyperlinkedModelSerializer"가 필요할 때의 질문입니다. 그들은 RestFramework의 튜토리얼에서 그렇게 썼습니다. –

+0

@ChuckAguilar - 그건 또 다르게, 하이퍼 링크 된 ** ModelSerializer **는 시리얼 라이저입니다 (그래서 사용하고 싶을 수도 있습니다). 하이퍼 링크 ** IndentityField **는 필드 유형입니다. – Sayse

+1

OH! 나는 지금 본다!! 하하 "HyperlinkedModelSerializer"를 사용하고 싶었지만 "HyperlinkedIndentityField"라고 썼다. 나는 바보이다. 다시 한 번 감사드립니다! –

관련 문제