Category_id ожидалось число, но получено <django.db.models.fields.related_descriptors.create_forward_many_to_many_manager

Похоже, что ошибка вызвана obj.category_id в сериализаторе, имеющем отношение к отношениям "многие ко многим".

Ошибка:

TypeError: Поле 'category_id' ожидало число, но получило <django.db.models.fields.related_descriptors.create_forward_many_to_many_manager..ManyRelatedManager объект по адресу 0x0000025BB1C23EE0

.

Вот мой код:

modles.py:

class Category(models.Model):
    category_id = models.AutoField(primary_key=True)
    category_name = models.CharField(max_length=50)
    category_icon = models.CharField(max_length=500, null=True, blank=True)
    category_image = models.CharField(max_length=500, null=True, blank=True)
    category_description = models.CharField(max_length=1000, null=True, blank=True)
    active_status = models.BooleanField(default=True)

    def __str__(self):
        return str(self.category_id) +" -"+ str(self.category_name)


class Services(models.Model):
    service_id = models.AutoField(primary_key=True)
    parent_id = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)
    # parent_id = models.ForeignKey("Services", on_delete=models.CASCADE, default=0)
    # parent_id = models.IntegerField(default=0)
    service_name = models.CharField(max_length=100)
    service_icon = models.CharField(max_length=500, null=True, blank=True)
    service_image = models.CharField(max_length=500, null=True, blank=True)
    service_description = models.CharField(max_length=5000, null=True, blank=True)
    category_id = models.ForeignKey(Category,on_delete=models.CASCADE)
    active_status = models.BooleanField(default=True)
    type = models.SmallIntegerField(blank=True, null=True)

    def __str__(self):
        return str(self.service_id) +" -"+ str(self.service_name)


class Variant(models.Model):
    variant_id = models.AutoField(primary_key=True)
    service_id = models.ManyToManyField(Services)
    category_id = models.ManyToManyField(Category)
    variant_name = models.CharField(max_length=100)
    variant_icon = models.CharField(max_length=1000, null=True, blank=True)
    variant_image = models.CharField(max_length=1000, null=True, blank=True)
    variant_description = models.CharField(max_length=5000, null=True, blank=True)
    active_status = models.BooleanField(default=True)

views.py:

class ServicesList(viewsets.ViewSet):

    def retrieve(self, request, pk=None):

        queryset = Category.objects.get(category_id=pk)
        querysetSerializer = CategoryServiceListSerializer(queryset)
        return Response({"status":200,"message":"Success","data":querysetSerializer.data})

serialziers.py:

class ServiceListSerializer(serializers.ModelSerializer):

    class Meta:
        model = Services
        fields = "__all__"

class VariantServiceSerialzier(serializers.ModelSerializer):
    # service_id = ServiceListSerializer(many=True)   # Getting all service data, 
                                                     #i want only data for perticular category and parent_id=0
    service_id = serializers.SerializerMethodField()
    class Meta:
        model = Variant
        fields = ["variant_id", "variant_name", "variant_icon", "variant_image", "variant_description", "active_status","service_id"]

    def get_service_id(self,obj):
        print(obj.category_id)
        services = Services.objects.filter(category_id=obj.category_id)
        servicesSerializer = ServiceListSerializer(services,many=True)
        return servicesSerializer.data


class CategoryServiceListSerializer(serializers.ModelSerializer):
    variant = VariantServiceSerialzier(many=True, source="variant_set")

    class Meta:
        fields = ("category_id", "category_name", "category_icon", "category_description", "variant")
        model = Category

Ожидаемый выход:

{
    category_id:
    category_name:
    variants [
    {
        variant_id:
        variant_name:
        variant_icon:
        services: [
                        {
                        service_id: 
                        service_name:
                        service_description:
                        service_image:
                        service_type:
                        service_price: 
                        }

                        {
                        service_id: 
                        service_name:
                        service_description:
                        service_image:
                        service_type:
                        }

                        {
                        service_id: 
                        service_name:
                        service_description:
                        service_image:
                        service_type:
                        }

                        {
                        service_id: 
                        service_name:
                        service_description:
                        service_image:
                        service_type:
                        }

                        ]
    }
    {
        variant_id:
        variant_name:
        variant_icon:
        services : []
    }
Вернуться на верх