Вложенный сериализатор 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"
}]
}