在 DB django 中插入嵌套关系

insert nested relationships in DB django

需要帮助,我正在尝试将嵌套关系推送到 DB 中不知道我哪里出错了,validated_data 有什么问题吗,这里是字典列表,谢谢提前

class CatalogSerializer(serializers.ModelSerializer):
    catalog_products = CatalogProductsSerializer(source = 'catalogproducts_set',many=True)
    
    
    class Meta:
        model = Catalog
        fields = ['created_by','client','catalog_products','created_datetime','is_active']


    
    def create(self,validate_data):
        client_id = validate_data.pop('id')
        client = User.objects.get(id=client_id),
        catalog_obj = Catalog.objects.create(
            client = client,
            created_by = self.context['user'],
            is_active =True,
        )
      
        for pricelist_ins in validate_data:
            CatalogProducts.objects.create(
                catalog = catalog_obj,**pricelist_ins)

        return catalog_obj

基本视图集

class CatalogViewset(viewsets.ModelViewSet):
    queryset = Catalog.objects.all()
    serializer_class  = CatalogSerializer
    permission_classes = []
    authentication_classes = []

    def create(self, request, *args, **kwargs):
        if request.data:
            try:
               
                serialized_data = self.get_serializer(data = request.data)
                if serialized_data.is_valid(raise_exception=True):
                    serialized_data.save()
                    return Response(serialized_data.data,status=200)
            except Exception as e:
                return Response({'error':str(e)},status=400)
        return Response({'status':'invalid request'},status=400)

我在 Postman

中遇到的错误
{
    "error": "{'catalog_products': [ErrorDetail(string='This field is required.', code='required')]}"
}

我正在发布的数据

{

    "id":"2",
    "pricing_list":[
        {
        "from_quantity":"101",
        "to_quantiy":"34",
        "price":"1000"
        },
        {
        "from_quantity":"10",
        "to_quantiy":"501",
        "price":"2000"
        }
    ]
}

字段中有 catelogue_products,默认为必填项。但是您没有 posting 任何 catelogue_products。您需要 post 基于序列化程序字段的数据。经过验证的数据将不包含任何其他数据,但包含在序列化程序中设置的有效数据。

要使其可选,您可以尝试在 serialzier 中添加 required=False,如下所示:

class CatalogSerializer(serializers.ModelSerializer):
    catalog_products = CatalogProductsSerializer(source = 'catalogproducts_set',many=True, required=False)
    
    
    class Meta:
        model = Catalog
        fields = ['created_by','client','catalog_products','created_datetime','is_active']