更新嵌套的多对多

时间:2015-06-11 14:40:50

标签: python django django-rest-framework

我有一个如下所示的Serializer:

{
    "id": 97, 
    "categories": [
        23,
        18
    ], 
}, 

我的模型中的类别是many-to-many。我不希望嵌套视图只是ID,因此我使用了PrimaryKeyRelatedField。所以这只有在我有read_only=True我不想要的情况下才有效。

Relational field must provide a `queryset` argument, or set read_only=`True`.

我想运行每个id并将它们添加到模型中....

class ItemsSerializer(serializers.HyperlinkedModelSerializer):

    categories = serializers.PrimaryKeyRelatedField(many=True)


    def create(self, validated_data):

        categories = validated_data.pop('categories')
        instance = Items.objects.create(**validated_data)
        for ID in categories:
            add to model
            cat_instance = category.objects.get(id=ID)
            then add to cat_instance etc

这是如何实现的,因为PrimaryKeyRelatedField希望我只使用就绪。

1 个答案:

答案 0 :(得分:1)

您可以尝试继承ModelSerializer而不是HyperlinkedModelSerializer,然后为PrimaryKeyRelatedField提供queryset参数:

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