Фреймворк для отдыха Django — PrimaryKeyRelatedField

Я следую руководству по инфраструктуре Django REST и сейчас нахожусь здесь: http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions#adding-endpoints-for-our-user-models< /а>

Мой код для UserSerializer выглядит так:

class UserSerializer(serializers.ModelSerializer):
    snippets = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = User
        fields = ('id', 'username', 'snippets')

Я пытаюсь понять, что такое PrimaryKeyRelatedField. Для этого я изменяю код следующим образом и обновляю URL-адрес http://127.0.0.1:8000/users/, чтобы увидеть разные результаты.

Вариант 1

snippets = serializers.RelatedField(many=True, read_only=True)


{
    "count": 1, 
    "next": null, 
    "previous": null, 
    "results": [
        {
            "id": 1, 
            "username": "som", 
            "snippets": [
                "Snippet title = hello", 
                "Snippet title = New2"
            ]
        }
    ]
}

Это распечатка значения __unicode__() фрагментов. я ожидал этого

Вариант 2 — с использованием PrimaryKeyRelatedField

snippets = serializers.PrimaryKeyRelatedField(many=True, read_only=True)


{
    "count": 1, 
    "next": null, 
    "previous": null, 
    "results": [
        {
            "id": 1, 
            "username": "som", 
            "snippets": [
                1, 
                2
            ]
        }
    ]
}

Это распечатывает идентификатор первичного ключа двух фрагментов - Я этого не понимаю

Вариант 3 — закомментирование также приводит

#snippets = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

{
    "count": 1, 
    "next": null, 
    "previous": null, 
    "results": [
        {
            "id": 1, 
            "username": "som", 
            "snippets": [
                1, 
                2
            ]
        }
    ]
}

person dowjones123    schedule 21.06.2014    source источник


Ответы (1)


Из документов Serializer.

ModelSerializer по умолчанию использует первичные ключи для отношений

Если вы сами ничего не укажете, PrimaryKeyRelatedField будет использоваться под капотом, поэтому ваш вариант 2 является ожидаемым результатом.

Надеюсь, это поможет.

person Carlton Gibson    schedule 25.06.2014