Как настроить поле Hyperlink RelatedField в Django Rest Fraemwork?

#python-3.x #django #django-rest-framework

#python-3.x #django #django-rest-framework

Вопрос:

Привет, я работаю с Django Rest Framework. Я использую HyperLinkedRelatedField сериализатор из Rest Framework. Как показано на рисунке, url "http://127.0.0.1:8000/api/teams/new/" но я хочу, чтобы это было так "http://127.0.0.1:8000/api/teams/new/join/"

То же, что и quot;urlquot;, который хочет quot;url / join/

Вот код сериализатора

 class TeamListSerializer(serializers.ModelSerializer):
    privacy = serializers.ChoiceField(choices=options)
    avatar = serializers.ImageField(default='users/avatar/default/user.png')
    url = serializers.HyperlinkedIdentityField(read_only=True,
                                           view_name='team-detail',
                                           lookup_field='slug')
    class Meta:
        model = Team
        fields = (
            'url',
            'slug',
            'name',
            'description',
            'avatar',
            'privacy',
            'pinned',
        )

        read_only_fields = ('slug',)
 

Urls.py

 urlpatterns = [

           path('<slug:slug>/',
                TeamDetailAPIView.as_view(),
                name='team-detail'),

           path('<slug:slug>/join/',
                TeamMemberCreateAPIView.as_view(),
                name='team-join'),
         ]
 

Комментарии:

1. покажите нам свои URL-адреса

2. Я обновил post buddy, проверьте URL-адреса.

3. @iklinac спасибо, намека было достаточно :). хехе, я был просто слеп, забыл url.py досье..

Ответ №1:

Решаемая:

Просто обновив view_name URL-адрес, который я хочу. Я просто меняю view_name='team-detail' на view_name='team-join'

 join_url = serializers.HyperlinkedIdentityField(read_only=True,
                                                view_name='team-join',
                                                lookup_field='slug')
 

Ответ №2:

У меня была похожая проблема, и я решил ее, выполнив следующее:

Serializer.py:

 class TeamListSerializer(serializers.ModelSerializer):
    privacy = serializers.ChoiceField(choices=options)
    avatar = serializers.ImageField(default='users/avatar/default/user.png')
    url = serializers.HyperlinkedIdentityField(read_only=True,
                                           view_name='team-detail',
                                           lookup_field='slug')
    class Meta:
        model = Team
        fields = (
            'url',
            'slug',
            'name',
            'description',
            'avatar',
            'privacy',
            'pinned',
        )

        read_only_fields = ('slug',)

    def get_url(self, obj):
   
       return str(url   "/join/")  
 

Комментарии:

1. да, это тоже решение. Но я уже настроил свой URL-адрес в своих файлах url, просто назвав неправильное имя. Спасибо