The problem with my code is that it repeats the name of the property title for each object whose foreign key is in the product property model in a loop.I want the attribute_title():"Memory" field to be repeated only onceresult in react redux to be same :
PivotSerialize:attribute_id(pin):1product_id(pin):1attribute_name(pin):"ظرفیتحافظه"val(pin):"256"attribute_title(pin):"حافظه"attr_title_id(pin):"1"
I want the attribute_title():"حافظه" field to be repeated only once
my model is:
class AttributeTitle(models.Model): attribute_title_id = models.BigAutoField(primary_key=True, editable=False) title = models.CharField(max_length=100, unique=True)class Attribute(models.Model): attribute_id = models.BigAutoField(primary_key=True, editable=False) attr_title = models.ForeignKey(AttributeTitle, on_delete=models.CASCADE, null=True, related_name='attribute_model_related_name') attr_name = models.CharField(max_length=100)class ProductAttribute(models.Model): p_a_id = models.BigAutoField(primary_key=True, editable=False) product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='product_attribute') attribute = models.ForeignKey(Attribute, on_delete=models.CASCADE) value = models.CharField(max_length=100, null=True, blank=True)
my Serializer api is:
class ProductSerializer(serializers.ModelSerializer): category = serializers.SerializerMethodField(read_only=True) brands = serializers.SerializerMethodField(read_only=True) photos = serializers.SerializerMethodField(read_only=True) color = serializers.SerializerMethodField(read_only=True) productAttribute = serializers.SerializerMethodField(read_only=True) class Meta: model = Product fields = '__all__' def get_category(self, obj): category = obj.category serializers = CategorySerializer(category, many=False).data return serializers def get_brands(self, obj): brands = obj.brand serializers = BrandsSerializer(brands, many=False).data return serializers def get_photos(self, obj): photos = obj.product_images serializers = ProductPhotosSerializer(photos, many=True).data return serializers def get_color(self, obj): color = obj.product_color # ProductColor.objects.filter(product_id=obj._id) serializers = ProductColorSerializer(color, many=True).data return serializers def get_productAttribute(self, obj): attribute = obj.product_attribute # related_name='product_attribute' in ProductAttribute model serializers = PivotSerializer(attribute, many=True).data return serializersclass PivotSerializer(serializers.ModelSerializer): attribute_name = serializers.SerializerMethodField(read_only=True) attribute_title = serializers.SerializerMethodField(read_only=True) val = serializers.SerializerMethodField(read_only=True) attr_title_id = serializers.SerializerMethodField(read_only=True) class Meta: model = ProductAttribute fields = ['attribute_id', 'product_id', 'attribute_name', 'val', 'attribute_title', 'attr_title_id'] def get_attr_title_id(self, obj): attr = obj.attribute.attr_title.pk return str(attr) def get_attribute_name(self, obj): attr = obj.attribute return str(attr) def get_attribute_title(self, obj): res = obj.attribute.attr_title return str(res) def get_val(self, obj): res = obj.value return str(res)