PrimaryKeyRelatedField

PrimaryKeyRelatedField

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,这确实是正确的。

我的问题是...如何将PrimaryKeyRelatedFieldvalidated_data.pop一起使用以获取我提交的ID的列表?

我可以使用self.context.get("request").data['categories'],但这很讨厌,需要我将其转换为列表和其他内容。

最佳答案

对于其他任何遇到此问题的人,我找到了一种允许PrimaryKeyRelatedField可读/写的解决方案。只需添加queryset

categories = serializers.PrimaryKeyRelatedField(many=True, queryset=Category.objects.all())


它仍然会过滤正确的关系,这有点令人困惑。

10-06 12:56