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 : []
}