Уважаемые Тостеры (c. Battlestar Galactica), медленно, но верно перехожу на "светлую сторону", но на пути к просветлению стоит django-photologue.
Пишу django-приложение (сервис проката автомобилей), для управления изображениями использую django-photologue. Не пойму, как выбрать через присоединенную посредством foreign_key галереи одну фотографию, относящуюся к этой галерее. (
Нужно решение средствами Django ORM)
Для прояснения ситуации имеются следующие таблицы :
Моя модель, отвечающая за автомобили :
class Car(models.Model):
manufacturer = models.ForeignKey(CarManufacturer, verbose_name='Araç markası')
.......
gallery = models.ForeignKey(Gallery, verbose_name='Resimler')
.......
available = models.BooleanField(verbose_name='Araç mevcut')
is_rented = models.BooleanField(verbose_name='Araç kiralanabilir mi')
add_to_main = models.BooleanField(verbose_name='Anasayfaya ekle')
under_maintance = models.BooleanField(verbose_name='Araç servis dışı mıdır')
...........
...........
Модели django-photologue к которым идет привязка (из официального релиза)
class Gallery(models.Model):
...........
photos = SortedManyToManyField('Photo', related_name='galleries',
verbose_name=_('photos'), null=True, blank=True)
...........
class Photo(ImageModel):
title = models.CharField(_('title'), max_length=50, unique=True)
slug = models.SlugField(_('slug'), unique=True)
...........
def get_absolute_url(self):
return reverse('pl-photo', args=[self.slug])
...........
Как видно из связей, у каждого автомобиля (модель Car) имеется своя галерея изображений (модель Gallery), которая в свою очередь имеет Н-ое количество изображений через связь многие-ко-многим (модель Photo).
Внимание, вопросУважаемые знатоки, как должен выглядеть нижеследующий запрос к БД, средствами django-ORM
cursor = connection.cursor()
cursor.execute ('''SELECT DISTINCT ON (cars_car)
cars_car.id AS id,
cars_carmanufacturer.name AS manufacturer,
cars_carmodel.name AS model,
photologue_photo.image AS photo
FROM
cars_car,
photologue_photo,
photologue_gallery_photos,
cars_carmanufacturer,
cars_carmodel
WHERE
cars_car.available = True AND
cars_car.add_to_slider = True AND
cars_car.under_maintance = False AND
cars_car.gallery_id = photologue_gallery_photos.gallery_id AND
cars_car.manufacturer_id = cars_carmanufacturer.id AND
cars_car.model_id = cars_carmodel.id AND
photologue_gallery_photos.photo_id = photologue_photo.id''')
cars = cursor.fetchall()
Решение временное, пока кто-нибудь из уважаемых знатоков не скажет: "Болван, разве так делают? Не кошерно это, в django, писать SQL, да еще так криво, ёпт...", и конечно напишет свой супер-пупер правильный код.
UPD
photologue_gallery_photos = это таблица через которую идет связь многие ко многим(photologue_gallery и photologue_photos)