【发布时间】:2022-10-02 02:19:45
【问题描述】:
我正在从 Next.js API 发送 multipart/formdata,我可以以任何我想要的方式格式化数据,但我正在努力获得正确的格式。
现在,我有以下表单数据:
<QueryDict: {
\'name\': [\'Test Product\'],
\'brands[0]\': [\'1\'],
\'brands[1]\': [\'2\'],
\'option_types[0]\': [\'1\'],
\'product_variants[0]option_values[0]\': [\'1\'],
\'product_variants[0]option_values[1]\': [\'2\'],
>
和以下模型序列化器:
class ProductDetailAdminSerializer(
UniqueFieldsMixin, ProductAdminMixin, WritableNestedModelSerializer
):
categories = PrimaryKeyRelatedField(
many=True, allow_null=True, queryset=Category.objects.all()
)
option_types = PrimaryKeyRelatedField(
many=True, allow_null=True, queryset=OptionType.objects.all()
)
brands = PrimaryKeyRelatedField(
many=True, allow_null=True, queryset=Brand.objects.all()
)
product_variants = ProductVariantDetailAdminSerializer(many=True)
class Meta:
model = Product
fields = (
\"pk\",
\"name\",
\"subtitle\",
\"sku_symbol\",
\"categories\",
\"brands\",
\"description\",
\"option_types\",
\"product_variants\",
)
我的 ModelSerializer 不接受我指定列表/数组的方式。例如,如果我尝试这样做:
def validate_option_types(self, data):
print(data)
return data
我得到一个空列表,这意味着option_types 列表的格式错误,product_variants 和option_values 也是如此。我只是传递从request.data 获得的 QueryDict,如下所示:
def create(self, request, *args, **kwargs):
serializer = ProductDetailAdminSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors, status=400)
如果我使用上面的 QueryDict 的 JSON 版本和 JSON 内容类型,则序列化程序和其他一切都可以正常工作。顺便说一句,如果我使用ListField 而不是PrimaryKeyRelatedField 它也可以按预期工作,尽管ListField 实际上并没有给我所需的对象。
所以总结一下我的问题,DRF ModelSerializer 的正确 QueryDict 格式(特别是代表列表的字段)是什么?或者,在将 QueryDict 转换为模型序列化程序所期望的格式时,我是否缺少一个额外的步骤。
-
品牌、option_types 和产品变体是多对多字段吗?如果是,那么这不是正确的方法。
-
嗨@RanuVijay。
brands和option_types是多对多,但product_variants是多对一。正确的方法是什么?谢谢。
标签: django rest django-rest-framework multipart form-data