Как получить объект Foreignkey для отображения полного объекта в рамках отдыха Django - PullRequest
0 голосов
/ 15 мая 2019

У меня есть серверная часть Django, построенная с django_rest_framework.В настоящее время у меня есть объект, который является внешним ключом.Когда я делаю запрос API для захвата объекта, он отображает идентификатор внешнего ключа и только идентификатор.Я хочу, чтобы он отображал весь объект, а не только идентификатор foriegnkey.Не уверен, как это сделать, потому что он не показывает, как это сделать в документации.

Вот код:

Страница просмотров:

from users.models import Profile
from ..serializers import ProfileSerializer
from rest_framework import viewsets

class ProfileViewSet(viewsets.ModelViewSet):
    queryset = Profile.objects.all()
    lookup_field = 'user__username'
    serializer_class = ProfileSerializer

Существует внешний ключ пользователя, ссылающийся на пользователя.

URL:

from users.api.views.profileViews import ProfileViewSet
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'', ProfileViewSet, base_name='profile')
urlpatterns = router.urls

Сериализатор:

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = (
            'id',
            'user',
            'synapse',
            'bio',
            'profile_pic',
            'facebook',
            'twitter'
        )

Вот как это выглядит:

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[
    {
        "id": 1,
        "user": 3,
        "bio": "software engineer",
        "profile_pic": "http://127.0.0.1:8000/api/user/profile/profile_pics/allsum-logo-1.png",
        "facebook": "http://www.facebook.com/",
        "twitter": "http://www.twitter.com/"
    }
]

Ответы [ 2 ]

3 голосов
/ 15 мая 2019

Используйте depth=1 в вашем Meta классе сериализатора,

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = (
            'id',
            'user',
            'synapse',
            'bio',
            'profile_pic',
            'facebook',
            'twitter'
        )
        <b>depth = 1</b>
3 голосов
/ 15 мая 2019

Вы можете создать UserSerializer и использовать его в ProfileSerializer следующим образом (используя вложенный сериализатор ):

class UserSerializer(serializers.ModelSerializer):
     class Meta:
         model = User
         fields = (
            'username',
            'first_name',
            # and so on..
         )

class ProfileSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    class Meta:
        model = Profile
        fields = (
            'id',
            'user',
            'synapse',
            'bio',
            'profile_pic',
            'facebook',
            'twitter'
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...