DRF гиперссылка, модель, неправильно сконфигурированный - PullRequest
0 голосов
/ 16 марта 2020

Я конвертирую из ModelSerializer в HyperlinkedModelSerializer, следуя этому документу (https://www.django-rest-framework.org/api-guide/relations/)

доска

# board/urls.py
app_name = 'board'
urlpatterns = [
    path('boards/', BoardList.as_view(), name='board-list'),
    path('boards/<int:pk>', BoardDetail.as_view(), name='board-detail'),
    path('', api_root),
]
urlpatterns = format_suffix_patterns(urlpatterns)

# board/views.py
@api_view(['GET'])
def api_root(request, format=None):
    return Response({
        'boards': reverse('board:board-list', request=request, format=format)
    })

class BoardList(generics.ListCreateAPIView):
    queryset = Board.objects.all()
    serializer_class = BoardSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    # author = serializers.PrimaryKeyRelatedField(
    #     read_only=True, default=serializers.CurrentUserDefault()
    # )
    author = serializers.HyperlinkedRelatedField(
        read_only=True, default=serializers.CurrentUserDefault()
    )

    def perform_create(self, serializer):
        serializer.save(author=self.request.user)

class BoardDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Board.objects.all()
    serializer_class = BoardSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsAuthorOrReadOnly]

# board/serializers.py
class BoardSerializer(serializers.HyperlinkedModelSerializer):
    # author = serializers.PrimaryKeyRelatedField(
    #     read_only=True, default=serializers.CurrentUserDefault()
    # )
    author = serializers.HyperlinkedRelatedField(
        view_name='user-detail', read_only=True, default=serializers.CurrentUserDefault()
    )
    url = serializers.HyperlinkedIdentityField(view_name="board:board-detail")
    class Meta:
        model = Board
        # fields = ('id', 'author', 'title', 'body', 'image', 'created','updated')
        fields = ('url','id', 'author', 'title', 'body', 'image', 'created','updated')

пользователи

# users/serializers.py
class UserSerializer(serializers.HyperlinkedModelSerializer):
    # boards = serializers.PrimaryKeyRelatedField(
    #     many=True, queryset=Board.objects.all()
    # )
    boards = serializers.HyperlinkedRelatedField(
        view_name='user-detail',
        many=True, 
        queryset=Board.objects.all()
    )
    url = serializers.HyperlinkedIdentityField(view_name="users:user-detail")
    class Meta:
        model = User
        # fields = ('id', 'username', 'boards')
        fields = ('url', 'id', 'username', 'boards')

Я получил эту ошибку,

Неправильно настроен в /boards / Не удалось разрешить URL-адрес для связи с гиперссылкой, используя имя представления "board-detail" ». Возможно, вам не удалось включить связанную модель в ваш API или неправильно настроен атрибут lookup_field в этом поле.

В соответствии с документом в разделе отношений, (https://www.django-rest-framework.org/api-guide/relations/) ,, по умолчанию lookup_field это pk, что мне не нужно на данный момент. Если это не так, пожалуйста, поправьте меня. Если мне нужно lookup_field, какую переменную мне нужно передать?

...