Поле сериализатора Django не работает - PullRequest
0 голосов
/ 29 апреля 2018

Я не нашел решения, хотя посмотрел на заданные вопросы ...

Когда я использую этот сериализатор:

class MessageSerializer(ModelSerializer):
    sender = UserMobileSerializer(read_only=True)

    class Meta:
        model = Messages
        fields = '__all__'

Я получаю что-то вроде этого:

{
    "id": 62,
    "sender": {
        "pk": 12,
        "email": "john@gmail.com",
        "full_name": "John",
        "profile_photo": null
    },
    "created_at": "2018-04-29T00:54:50.437662",
    "message": "sdkjnasljdhkajsjdlasdasda",
    "read_at": false,
    "target": 18
}

Мне бы хотелось, чтобы поле target было похоже на sender, то есть: отображать полную информацию о пользователе, а не только идентификатор.

Я пытался добавить эту строку: target = UserMobileSerializer(), но я все еще получаю только идентификатор в выводе. Я тоже попробовал target = UserMobileSerializer(read_only=True) но ничего не изменилось.

1 Ответ

0 голосов
/ 29 апреля 2018

Вы не добавляете определенное вами поле к fields в Meta сериализатора. Попробуйте это:

class MessageSerializer(ModelSerializer):
    sender = UserMobileSerializer(read_only=True)

    class Meta:
        model = Messages
        fields = ('your', 'fields', 'sender')

РЕДАКТИРОВАТЬ: Вам также необходимо сериализовать target. Как это:

class TargetSerializer(ModelSerializer):
    class Meta:
        model = Target
        fields = ('id', 'title')  # Add fields you want to get in the response.


class MessageSerializer(ModelSerializer):
    target = TargetSerializer(read_only=True)  # You should have TargetSerializer defined
    sender = UserMobileSerializer(read_only=True)

    class Meta:
        model = Messages
        fields = ('your', 'fields', 'target', 'sender')
...