Записываемый вложенный метод сериализатора получает ошибку при отправке запроса

models.py

class Client(models.Model):


    client_id = models.AutoField(unique=True, primary_key=True)
    org = models.ForeignKey(Organisation, on_delete=models.CASCADE, related_name='org',null=True)
    product = models.ManyToManyField(Product,related_name='product')
    client_name = models.CharField(max_length=100)
    client_code = models.CharField(max_length=20)
    client_logo = models.ImageField(upload_to=upload_to,storage=DownloadableS3Boto3Storage, null=True, blank=True)
    currency = MoneyField(max_digits=10, decimal_places=2, default_currency='INR', null=True)
    billing_method = models.CharField(max_length=40)
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)
    email_id = models.EmailField(max_length=100)
    contact_no = models.CharField(max_length=20)
    mobile_no = models.CharField(max_length=20)
    description = models.TextField(max_length=500)
    street_address = models.CharField(max_length=250)
    city = models.CharField(max_length=50)
    state = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    pincode = models.CharField(max_length=10)
    industry = models.CharField(max_length=100)
    company_size = models.IntegerField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    is_active = models.IntegerField(default=0, choices=STATUS_CHOICES)


    class Meta:
        db_table = "client_master"

    def __str__(self):
        return self.client_name

serializers.py

class Client_Serializers(serializers.ModelSerializer):
    #product_name = Product_Serializers(many=True)
    product = Product_Serializers(many=True)
    class Meta:
        model = Client
        fields = ('client_id','currency','billing_method','first_name','last_name','description','street_address','city','state','country','pincode','industry','company_size','client_name', 'contact_no','mobile_no', 'email_id','client_logo','client_code','product',)

    def create(self, validated_data):
        products_data = validated_data.pop('product')
        product = Product.objects.create(**validated_data)
        for product_data in products_data:
            Product.objects.create(product=product, **product_data)
        return product

Получение данных по методу GET

{
            "client_id": 3,
            "currency": "0.05",
            "billing_method": "credit card",
            "first_name": "career",
            "last_name": "lab",
            "description": "NA",
            "street_address": "tiliconveli",
            "city": "tirunelveli",
            "state": "tamilnadu",
            "country": "India",
            "pincode": "600200",
            "industry": "software",
            "company_size": 100,
            "client_name": "techfetch",
            "contact_no": "1234567890",
            "mobile_no": "1234567890",
            "email_id": "icanio@gamil.com",
            "client_logo": "https://icanio-project-management.s3.amazonaws.com/client_logo/sup_bat_fDauRxK.jpg",
            "client_code": "TFH",
            "product": [
                {
                    "product_id": 5,
                    "product_name": "time"
                }
            ]
        }

Но при размещении его в том же формате он не размещается, показывая как

{
    "status": "error",
    "code": 400,
    "data": {
        "product": [
            "This field is required."
        ]
    },
    "message": "success"
}

Views.py для справки

class Client_Viewset(DestroyWithPayloadMixin,viewsets.ModelViewSet):
    renderer_classes = (CustomRenderer, )
    queryset=models.Client.objects.all()
    serializer_class=serializers.Client_Serializers
    parser_classes = [MultiPartParser, FormParser]



    filter_fields = (
        'client_id',
        'client_name',
        'client_code',
        'org_id',
    )

Как я могу отправить те же данные, которые я получаю в GET-запросе поля Product. Пожалуйста, помогите мне решить эту проблему, так как я застрял в ней на два дня. Я перепробовал столько способов, но в итоге ничего не вышло.

Из вашего кода следует, что Client_Serializers предназначен для Client модели, но метод create не создает никакого Client объекта.

Client_Serializers должно быть что-то в этом роде -

class Client_Serializers(serializers.ModelSerializer):
    product = Product_Serializers(many=True)
    class Meta:
        model = Client
        fields = ('client_id','currency','billing_method','first_name','last_name','description','street_address','city','state','country','pincode','industry','company_size','client_name', 'contact_no','mobile_no', 'email_id','client_logo','client_code','product',)

    def create(self, validated_data):
        products_data = validated_data.pop('product')
        client = Client.objects.create(**validated_data) # Create a client object
        for product_data in products_data:
            Product.objects.create(client=client, **product_data)
        return client
Вернуться на верх