python - 追加两个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"
]
}
]
美国广播公司专辑
上传/images_aPWBEcp.jpeg
上传/images.jpeg
abc123专辑
上传/ic_id_card_placeholder_N0x2KP9.png
上传/images_jocZcBu.jpeg
上传/ic_id_card_placeholder_N0x2KP9.png
解决方案
这里:
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_images
for 循环之前进行初始化并继续附加它,因此两个相册最终共享相同的图像列表。修复很简单: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
推荐阅读
- node.js - 我做错了什么?
- pandas - 如何在 pandas 数据框中将同名列合并为一个,以便所有列都是唯一的?
- maven-plugin - 使用 native-image-maven-plugin 构建 GraalVM 错误
- javascript - CesiumJS JSON - 描述图像从信息框中删除属性
- object - 为扩展 Pane 的类创建的对象在哪里?
- python - 使用糟糕的计算机进行迁移学习
- ionic-framework - Webview 在 Android KitKat - Ionic 4 中未正确呈现 CSS
- concourse - 大厅模板:如何转义双花括号(参数),用作文字?
- qt - 如何在输入掩码模式下使 LineEdit 的光标变细?
- xamarin - 从 Android/Java 原生库调用 C#