#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/"
Вот код сериализатора
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, просто назвав неправильное имя. Спасибо