Вложенный сериализатор DRF имеет валидацию по полям вместо ID

У меня есть PermissionSerializer и GroupSerializer, когда я запрашиваю получение данных, все работает нормально, но когда я хочу добавить новую группу, она ожидает получить все поля PermissionSerializer, тогда как для модели ей нужен только ID.

class PermissionSerializer(serializers.HyperlinkedModelSerializer):
    """Permission serializer."""

    url = serializers.HyperlinkedIdentityField(view_name="account:permission-detail")
    content_type = ContentTypeSerializer(many=False, read_only=True)

    class Meta:
        model = Permission
        read_only_fields = (
            "url",
            "id",
            "name",
            "content_type",
            "codename",
        )
        fields = (
            "url",
            "id",
            "name",
            "content_type",
            "codename",
        )


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    """Group serializer."""

    url = serializers.HyperlinkedIdentityField(view_name="account:group-detail")
    permissions = PermissionSerializer(many=True)

    class Meta:
        model = Group
        fields = (
            "url",
            "name",
            "permissions",
        )

Когда я включаю read_only=True, он полностью игнорирует проверку поля permissions, в то время как мне очень нужно, чтобы оно также проверялось.

Образец запроса, который, как я ожидал, будет работать нормально:

{
    "name": "editors",
    "permissions": [
        {"id": 8}
    ]
}

или

{
    "name": "editors",
    "permissions": [8]
}

Но я понятия не имею, как это исправить. Если я изменю PermissionSerializer, то мой вывод будет изменен, чего не должно быть, и если я хочу сохранить его таким, какой он есть сейчас, то я должен скормить его всем permissions полям:

{
    "name": "editors",
    "permissions": [{
        "name": "something",
        "url": "something",
        "content_type": "something",
        "codename": "some code"
    }]
}
Вернуться на верх