如何使用 PrimaryKeyRelatedField 更新多对多关系的类别

How to use PrimaryKeyRelatedField to update categories on a many-to-many relationship

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 但是这个 HAS根据 DRF 是正确的。

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

我可以使用 self.context.get("request").data['categories'] 但这很讨厌,需要我将它变成一个列表 + 其他东西。

对于遇到此问题的任何其他人,我找到了一个允许 PrimaryKeyRelatedField 成为 read/writeable 的解决方案。只需添加 queryset

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

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