Как отправить POST в Django Rest, передав только ID отношений, а не весь словарь, после использования сериализаторов для связанных полей?

Я делаю небольшой учебник по Django Rest Framework, так как я никогда не использовал его раньше, хотя у меня есть некоторый опыт работы с Django с использованием шаблонов.

Я немного отклоняюсь от учебного курса, так как считаю, что так я лучше учусь, поэтому я дошел до того, что в простом приложении Movie Rating, когда вы делаете GET из сериализатора Ratings, вы получаете только идентификаторы FK и рейтинг "звезды", который я добавил:

[
    {
        "id": 1,
        "user": 1,
        "movie": 1,
        "stars": 5
    },
    {
        "id": 2,
        "user": 1,
        "movie": 4,
        "stars": 4
    }
]

Как я узнал в предыдущем уроке из упомянутого курса, я знаю, что можно указать сериализатор для каждого поля, так что вместо GET-запроса вы получаете словарь со всеми данными.

class RatingSerializer(serializers.ModelSerializer):
    movie = MovieSerializer(many=False)
    user = UserSerializer(many=False)

    class Meta:
        model = Rating
        fields = ('id', 'user', 'movie', 'stars')

Таким образом, возврат из GET в маршрут Ratings показывает реляционные данные, а не только идентификаторы:

[
    {
        "id": 1,
        "user": {
            "id": 1,
            "username": "admin",
            "email": "admin@admin.com"
        },
        "movie": {
            "id": 1,
            "title": "Matrix 2",
            "synopsis": "Neo is back."
        },
        "stars": 5
    },
    {
        "id": 2,
        "user": {
            "id": 1,
            "username": "admin",
            "email": "admin@admin.com"
        },
        "movie": {
            "id": 4,
            "title": "Jurassic Park",
            "synopsis": "Big chickens."
        },
        "stars": 4
    }
]

Но теперь, когда я пытаюсь добавить новый рейтинг с помощью POST-запроса, при использовании формы-данных на Postman он говорит, что поля обязательны, хотя я уже передаю их, а когда я пытаюсь отправить POST, используя формат JSON, он возвращается, говоря мне, что я не могу передать только ID, что мне нужно передать целый словарь для полей "фильм" и "пользователь".

POST
http://127.0.0.1:8000/api/v1/ratings/
movie:4
stars:4
user:1

Я немного изучил этот вопрос и увидел ответ, в котором говорилось, что нужно переопределить "create", и я попробовал добавить это в свой класс Serializer (тот, что в предыдущем фрагменте кода), но безрезультатно. По-прежнему получаю те же ошибки, отказываясь принимать только идентификаторы

def create(self, validated_data):
    id_movie = validated_data.pop('movies')
    id_user = validated_data.pop('users')
    movie = Movie.objects.get(id=id_movie)[0]
    user = User.objects.get(id=id_user)[0]

    return Rating

Что мне нужно сделать, чтобы иметь возможность передавать в POST только идентификаторы, а не все данные для каждого поля? Переопределение "create" - это правильный путь, и я что-то упустил в своем коде? Или это неправильный способ?

Заранее спасибо.

Вернуться на верх