为了账号安全,请及时绑定邮箱和手机立即绑定

附加两个 for 循环 django

附加两个 for 循环 django

青春有我 2021-07-02 14:58:00
我需要获取带有相关图像的专辑。我在第一个循环abc和abc123 中有两个专辑, 在 abc 专辑中有两个图像,在 abc123 专辑中有 3 个图像,但我的反应是在每个专辑中返回 5 个图像。我无法做出正确的回应。模型.pyclass 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)视图.pydef 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.jpegabc123专辑上传/ic_id_card_placeholder_N0x2KP9.png上传/images_jocZcBu.jpeg上传/ic_id_card_placeholder_N0x2KP9.png
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

我认为您需要将循环内的 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)


查看完整回答
反对 回复 2021-07-06
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

这里:


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


查看完整回答
反对 回复 2021-07-06
  • 3 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信