Форум сайта python.su
есть несколько моделей:
class Section(models.Model):
...
class PhotoAlbum(models.Model):
section_name=ForeignKey(Section)
...
class Photo(models.Model):
album_name=ForeignKey(PhotoAlbum)
visible=BooleanField
...
albums=PhotoAlbum.objects.filter(section_name=7)
albums_list=[]
for i in albums: albums_list.append(i.id)
photos=Photo.objects.extra(where=[album_name IN %s, visible=True], params=albums_list)
Отредактировано (Март 11, 2011 13:39:46)
Офлайн
Dr.LivsiПолучить одним запросом через Django model API вряд ли получится, т.к. для первых 2-х моделей уже получаем множество (QuerySet) фотоальбомов, и для каждого из них может быть множество фото.
Может быть имеется более элегантное решение? Через select_related, например…
s = Section.objects.get(id=7)
albums = s.photoalbum_set.all()
...
SELECT photo.id, photo.url, photo.visible
FROM section
JOIN photoalbum ON section.id = photoalbum.section_id
JOIN photo ON photo_album.id = photo.album_id
WHERE section.id = 7
Офлайн
albums=PhotoAlbum.objects.filter(section_name=7)
photos=Photo.objects.filter(album_name__in=albums)
Офлайн
То ли я чёт не понял, то-ли вы действительно изобретатели.
Photo.objects.filter(album_name__section_name__pk=2)
Офлайн
Всем спасибо за предложенные варианты. Буду пробовать.
Офлайн