python - How to get only one image from Set() in Pony ORM -
entities:
class car(db.entity): image = set("image") name = required(str, 40,) class image(db.entity): name = required(str, unique=true) car = required(car) and want information on cars-list page: 1 car - 1 image of car.
i use:
cars = select((car, car.image) car in car).distinct().show() i have
car[1]|image[1] car[1]|image[2] ... car[5]image[1] car[5]image[2] ... but need first image of each car, not images.
how this?
thanks!
code first image each car (image lowest id):
#!/usr/bin/env python pony.orm import * db = database() db.bind('sqlite', ':memory:', create_db=true) class car(db.entity): image = set("image", lazy=true) name = required(str, 40) class image(db.entity): name = required(str, unique=true) car = required(car) db.generate_mapping(create_tables=true) sql_debug(true) db_session: car1 = car(name='car1') car2 = car(name='car2') image1 = image(name='image1', car = car1) image2 = image(name='image2', car = car1) image3 = image(name='image3', car = car2) cars = select((car, car.name, image, image.name) car in car image in car.image if image.id == min(car.image.id)).show() result:
get connection local pool switch autocommit mode begin immediate transaction insert "car" ("name") values (?) [u'car1'] insert "car" ("name") values (?) [u'car2'] insert "image" ("name", "car") values (?, ?) [u'image1', 1] insert "image" ("name", "car") values (?, ?) [u'image2', 1] insert "image" ("name", "car") values (?, ?) [u'image3', 2] select "car"."id", "car"."name", "image"."id", "image"."name" "car" "car" left join "image" "image-1" on "car"."id" = "image-1"."car" left join "image" "image" on "car"."id" = "image"."car" group "car"."id", "car"."name", "image"."id", "image"."name" having "image"."id" = min("image-1"."id") car |car.name|image |image.name ------+--------+--------+---------- car[1]|car1 |image[1]|image1 car[2]|car2 |image[3]|image3 commit release connection by way, generated sql rather strange, don't think executing 2 identical left joins makes sense. edit: ok, makes sense (see comments).
Comments
Post a Comment