如何使用 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 是正确的。
我的问题是...如何使用 PrimaryKeyRelatedField
和 validated_data.pop
来获取我提交的 ID 列表?
我可以使用 self.context.get("request").data['categories']
但这很讨厌,需要我将它变成一个列表 + 其他东西。
对于遇到此问题的任何其他人,我找到了一个允许 PrimaryKeyRelatedField
成为 read/writeable 的解决方案。只需添加 queryset
categories = serializers.PrimaryKeyRelatedField(many=True, queryset=Category.objects.all())
它仍然会过滤正确的关系,这有点令人困惑。
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 是正确的。
我的问题是...如何使用 PrimaryKeyRelatedField
和 validated_data.pop
来获取我提交的 ID 列表?
我可以使用 self.context.get("request").data['categories']
但这很讨厌,需要我将它变成一个列表 + 其他东西。
对于遇到此问题的任何其他人,我找到了一个允许 PrimaryKeyRelatedField
成为 read/writeable 的解决方案。只需添加 queryset
categories = serializers.PrimaryKeyRelatedField(many=True, queryset=Category.objects.all())
它仍然会过滤正确的关系,这有点令人困惑。