我需要得到相关图像的相册,.I在第一循环中有两个相册,,abc 和 abc123 中有两个相册,abc相册中有两个图像,abc123相册中有3个图像,但是我的响应是在每个相册中返回5个图像。我无法做出正确的反应。
models.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)views.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专辑
上载/图片_aPWBEcp.jpeg
上传/图片
abc123专辑
上传/ic_id_卡_占位符_N0x2KP9.png
上载/图片_jocZcBu.jpeg
上传/ic_id_卡_占位符_N0x2KP9.png
发布于 2018-10-04 07:04:07
我认为您需要在循环中清空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)发布于 2018-10-04 07:04:26
在此:
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您将在for循环之前初始化all_images,并继续添加到其中,这样两张专辑最终都会共享相同的图像列表。修复很简单:在for循环中初始化all_images,而不是:
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的特性。而不是手动创建AlbumImage模型, instead和避免手动创建列表等(并且获得更好的性能也nt允许ORM优化您的查询)。
发布于 2018-10-04 07:22:12
因为'all_images‘是一个列表,而列表在Python中是可变的。在内循环中,当您在“all_images”列表后面添加时,它也会在引用它的地方得到更新。这也不是获取你想要的信息的正确方法。阅读Django中的序列化器,并将它们用于本例。https://www.django-rest-framework.org/api-guide/serializers/
https://stackoverflow.com/questions/52640677
复制相似问题