附加两个 for 循环 django

我需要获取带有相关图像的专辑。我在第一个循环abc和abc123 中有两个专辑, 在 abc 专辑中有两个图像,在 abc123 专辑中有 3 个图像,但我的反应是在每个专辑中返回 5 个图像。我无法做出正确的回应。


模型.py


class Upload(models.Model):

    image=models.ImageField(upload_to='upload/', blank=True, null=True)

    user = models.ForeignKey(User, on_delete=models.CASCADE)

    # url= models.CharField(max_length=500)

    def __str__(self):

        return str(self.id)


class Album(models.Model):

    name = models.CharField(max_length=128)

    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):

        return str(self.name)


class AlbumImage(models.Model):

    album = models.ForeignKey(Album, on_delete=models.CASCADE)

    image = models.ForeignKey(Upload, on_delete=models.CASCADE)

视图.py


def getalbum(self,request):

    albums=Album.objects.filter(user=request.user)

    album={}

    image_list={}

    all_results=[]

    all_images=[]

    for a in albums:

        album_images=AlbumImage.objects.filter(album=a)

        for i in album_images:

            image_object=Upload.objects.get(id=str(i.image))

            image_list=str(image_object.image)

            all_images.append(image_list)

        album[a.name]=all_images

    all_results.append(album)

    return Response(all_results)

回复


[

    {

        "abc": [

            "upload/images_aPWBEcp.jpeg",

            "upload/images.jpeg",

            "upload/ic_id_card_placeholder_N0x2KP9.png",

            "upload/images_jocZcBu.jpeg",

            "upload/ic_id_card_placeholder_N0x2KP9.png"

        ],

        "abc123": [

            "upload/images_aPWBEcp.jpeg",

            "upload/images.jpeg",

            "upload/ic_id_card_placeholder_N0x2KP9.png",

            "upload/images_jocZcBu.jpeg",

            "upload/ic_id_card_placeholder_N0x2KP9.png"

        ]

    }

]

abc专辑


上传/images_aPWBEcp.jpeg


上传/images.jpeg


abc123专辑


上传/ic_id_card_placeholder_N0x2KP9.png


上传/images_jocZcBu.jpeg


上传/ic_id_card_placeholder_N0x2KP9.png


青春有我
浏览 108回答 3
3回答

慕虎7371278

我认为您需要将循环内的 all_images 列表清空为:def getalbum(self,request):   albums=Album.objects.filter(user=request.user)   album={}   image_list={}   all_results=[]   for a in albums:        album_images=AlbumImage.objects.filter(album=a)        all_images = []        for i in album_images:            image_object=Upload.objects.get(id=str(i.image))            image_list=str(image_object.image)            all_images.append(image_list)        album[a.name]=all_images    all_results.append(album)    return Response(all_results)

慕无忌1623718

这里:all_images=[]for a in albums:    album_images=AlbumImage.objects.filter(album=a)    for i in album_images:        image_object=Upload.objects.get(id=str(i.image))        image_list=str(image_object.image)        all_images.append(image_list)    album[a.name]=all_images您在all_imagesfor 循环之前初始化并继续附加到它,因此两个相册最终共享相同的图像列表。修复很简单:all_images在 for 循环中初始化:for a in albums:    all_images=[]    album_images=AlbumImage.objects.filter(album=a)    for i in album_images:        image_object=Upload.objects.get(id=str(i.image))        image_list=str(image_object.image)        all_images.append(image_list)    album[a.name]=all_images话虽如此,您使它变得比实际复杂得多,而且您没有正确使用 django 的功能。您可以使用 a代替手动创建AlbumImage模型,而无需手动创建列表等(并获得更好的性能,允许 ORM 优化您的查询)。M2MField
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python