Django Rest Framework有一个PrimaryKeyRelatedField,它在我的many-to-many
关系中列出了类别的ID ...
class CatalogueItemsSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='catalogue_item_detail')
name = serializers.CharField(min_length=2, max_length=60)
categories = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
我想覆盖
create()
在类别字段上获得很多已发布的ID(传统上DRF要我发送URL)。JSON POST:
{
"name": "test",
"categories": [1,2]
}
序列化器创建:
def create(self, validated_data):
categories = validated_data.pop('categories', None)
print(categories) # This shows and empty/None even when ID are posted!
我有的问题是
categories
在上面我将是空的,我想是因为PrimaryKeyRelatedField
设置为read_only=True
,但是根据DRF,这确实是正确的。我的问题是...如何将
PrimaryKeyRelatedField
与validated_data.pop
一起使用以获取我提交的ID的列表?我可以使用
self.context.get("request").data['categories']
,但这很讨厌,需要我将其转换为列表和其他内容。 最佳答案
对于其他任何遇到此问题的人,我找到了一种允许PrimaryKeyRelatedField
可读/写的解决方案。只需添加queryset
categories = serializers.PrimaryKeyRelatedField(many=True, queryset=Category.objects.all())
它仍然会过滤正确的关系,这有点令人困惑。