i have one model which having foreign key with images feild and in that i have multiple images can i get them in single list like this :

Question:

Models.py

class Cat_Breed_Detail(models.Model):
    id = models.AutoField(primary_key=True,verbose_name="id")
    key_name = models.CharField(max_length=35,default='',null=True,verbose_name="key_name")
    display_name= models.CharField(max_length=35,default='',null=True,verbose_name="display_name")
    def __str__(self):
        return self.key_name


class Cat_Image(models.Model):
    image=models.ImageField(upload_to="ImagesCat/")
    cat=models.ForeignKey(Cat_Breed_Detail,on_delete=models.CASCADE,null=True,related_name='images')
    def image_preview(self):
        if self.image:
            return mark_safe('<img src="{0}" width="150" height="150" />'.format(self.image.url))
        else:
            return '(No image)'

Selializer.py

class CatImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Cat_Image
        fields = '__all__'
 
class CatDataSerializer(serializers.ModelSerializer):
    class Meta:
        model = Cat_Breed_Detail
        fields = ['id','key_name','display_name','images']

View.py

    class CatListCreate(ListAPIView):
    queryset = CatBreedDetails.objects.all().order_by('key_name')
    serializer_class = CatDataSerializer
    pagination_class = CustomPagination 

response i am getting here i am getting nested response i dont want it i just want image url in images as a list not like the response i am currently getting :

{
            "id": 9,
            "key_name": "abyssinian",
            "display_name": "Abyssinian",
            "image": [
                {
                    "id": 3,
                    "image": "/media/Abyssinian_0006.jpg",
                    "cat": 9
                },
                {
                    "id": 4,
                    "image": "/media/Abyssinian_0092.jpg",
                    "cat": 9
                }
            ]
        },
        {
            "id": 18,
            "key_name": "american_bobtail",
            "display_name": "American Bobtail",
            "image": [
                {
                    "id": 5,
                    "image": "/media/American_Bobtail_0004.jpg",
                    "cat": 18
                },
                {
                    "id": 6,
                    "image": "/media/American_Bobtail_0057.png",
                    "cat": 18
                }
            ]
        },
        {
            "id": 19,
            "key_name": "american_curl",
            "display_name": "American Curl",
            "image": [
                {
                    "id": 7,
                    "image": "/media/American_Curl_0078.jpg",
                    "cat": 19
                },
                {
                    "id": 8,
                    "image": "/media/American_Curl_0083.png",
                    "cat": 19
                }
            ]
        }

i want to get all the images in one list not like image:{image:"…."
,image:"……"} i am new to djnago and still learning is there any way to make it done .
is there any way i can get response like that :


{
            "id": 9,
            "key_name": "abyssinian",
            "display_name": "Abyssinian",
            "image":  ["/media/Abyssinian_0006.jpg","/media/Abyssinian_0092.jpg",]
                  
        }
Asked By: Istiyak Shaikh

||

Answers:

[
    {
        "id": 1,
        "key_name": "first cat",
        "display_name": "first cat",
        "images": [
            {
                "image": "http://localhost:8000/ImagesCat/Screenshot_from_2022-12-21_18-16-28.png"
            },
            {
                "image": "http://localhost:8000/ImagesCat/Screenshot_from_2022-12-29_13-41-31.png"
            }
        ]
    }
]

this is how I get response if you want to make like yours then you have to override list method

from rest_framework import serializers

from app.models import Cat_Image, Cat_Breed_Detail


class CatImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Cat_Image
        fields = '__all__'


class CatImageSerializer2(serializers.ModelSerializer):
    class Meta:
        model = Cat_Image
        fields = ['image']


class CatDataSerializer(serializers.ModelSerializer):
    images = CatImageSerializer2(read_only=True, many=True)

    class Meta:
        model = Cat_Breed_Detail
        fields = ['id', 'key_name', 'display_name', 'images']
Answered By: Tanveer Ahmad

i just override the serialize data like this :

for d in seri.data:
         d.update({'images': [nest_d['image'] for nest_d in d['images']]})
Answered By: Istiyak Shaikh