Нужно добавить поля одной модели в сериализаторы другой модели, но при POST-запросе возникает ошибка

models.py

class Product(models.Model):
    product_id = models.AutoField(unique=True, primary_key=True)
    product_name = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = "product_master"

    def __str__(self):
        return self.product_name

class Organisation(models.Model):
    """
    Organisation model
    """
    org_id = models.AutoField(unique=True, primary_key=True)
    org_name = models.CharField(max_length=100)
    org_code = models.CharField(max_length=20)
    org_mail_id = models.EmailField(max_length=100)
    org_phone_number = models.CharField(max_length=20)
    org_address = models.JSONField(max_length=500, null=True)
    product = models.ManyToManyField(Product, related_name='products')
    org_logo = models.ImageField(upload_to='org_logo/')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = "organisation_master"

    def __str__(self):
        return self.org_name

serializers.py

class Product_Serializers(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ('product_id', 'product_name',)

class Organisation_Serializers(serializers.ModelSerializer):
    product = Product_Serializers(many=True)
    class Meta:
        model = Organisation
        fields = ('org_id', 'org_name', 'org_address', 'org_phone_number', 'org_mail_id','org_logo','org_code','product')
        depth = 1

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

Можете ли вы, пожалуйста, предложить мне способ, так как я пробовал много способов в соответствии с моими знаниями, но это не работает.

Если вы используете кортеж для полей, поставьте запятую после product в ваших полях. Если вы используете список, то не ставьте запятую в конце

fields = ('org_id', 'org_name', 'org_address', 'org_phone_number', 'org_mail_id','org_logo','org_code','product',)
        depth = 1

Обновите ваши сериализаторы до:

class Organisation_Serializers(serializers.ModelSerializer):
    class Meta:
        model = Organisation
        fields = ('org_id','org_name','org_address','org_phone_number','org_mail_id','org_logo','org_code','product',)

Обновите свои представления следующим образом:

class Organisation_Viewset(DestroyWithPayloadMixin,viewsets.ModelViewSet):
    renderer_classes = (CustomRenderer, )  #ModelViewSet Provides the list, create, retrieve, update, destroy actions.
    queryset=models.Organisation.objects.all()
    parser_classes = [MultiPartParser, FormParser]
    serializer_class=serializers.Organisation_Serializers


    def create(self, request, *args, **kwargs):
        data = request.data
        serializer = Organisation_Serializers(data)
        serializer.is_valid(raise_exceptions=True)
        serializer.save()
        return Response(serializer.data)

Теперь мы можем отправить id как массив для create api:

curl -XPOST \
     -H [authentication]
     http://localhost:8000/some/api/url
     -d '{"org_name": "hero", "product": [1,2]}'
Вернуться на верх