21

请看一下这些模型:

class Album(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=200)
    pub_date = models.DateTimeField(default=datetime.now)


class Photo(models.Model):
    album = models.ForeignKey(Album, default=3)
    image = models.ImageField(upload_to=get_upload_file_name)
    caption = models.CharField(max_length=200)
    pub_date = models.DateTimeField(default=datetime.now)

如何获取特定相册的照片集???以及如何从照片实例本身获取相册?

我试过这个:

# To get the set of photos from the user (tika) album:
>>>t = User.objects.get(username='tika')
>>>t_album = Album.objects.get(user=t)
>>>t_album 
<Album: tika_album>
>>>t_album.image_set.all()
AttributeError: 'Album' Object has no attribute 'image_set'

请引导我走向正确的方向。谢谢你。

4

2 回答 2

30

你快到了。你应该使用photo_set而不是image_set

>>>t_album.photo_set.all() 

即小写的型号名称_set

如果您想要 1 个查询中的照片列表,

photos = Photo.objects.filter(album__user__username='tika')
于 2013-11-05T22:06:01.453 回答
24

更好的是,你可以写,在Photo

album = models.ForeignKey(Album, related_name='photos', default=3)

将是从tophotos的反向字段的名称。如果您不定义它,则反向字段将命名为.AlbumPhotophoto_set

然后你使用

t_album.photos.all()  # only if you've defined the `related_name` argument to 'photos'

或者

t_album.photo_set.all()
于 2013-11-05T22:11:39.387 回答