1. Получение поля из ManyToMany таблицы

    30.09.2008 00:08

    Есть таблицы User, Post, UserPost.
    class User( models.Model ):
    ...

    class User( models.Model ):
    user = models.ManyToManyField( User, through = 'UserPost' )

    class UserPost( models.Model ):
    user = models.ForeignKey( User )
    post = models.ForeignKey( Post )
    readed = models.BooleanField( default = False )
    Если делать
    Post.objects.filter( userpost__user = user )
    То запрос получается таким:
    SELECT `feeds_post`.`id`, `feeds_post`.`title`, `feeds_post`.`text`, `feeds_post`.`link`, `feeds_post`.`created_at`, `feeds_post`.`author`, `feeds_post`.`feed_id`, `feeds_feed`.`id`, `feeds_feed`.`title`, `feeds_feed`.`url`
    FROM `feeds_post`
    INNER JOIN `feeds_feed` ON (`feeds_post`.`feed_id` = `feeds_feed`.`id`)
    WHERE `feeds_post`.`feed_id` = 14
    ORDER BY `feeds_post`.`created_at` DESC LIMIT 10
    Соответственно поле userpost.readed можно дернуть в этом запросе. Вопрос в том как?
  2. gqbe.livejournal.com

    30.09.2008 00:12

    Упс. Вставил неправильный sql. Правильный запрос:
    SELECT `feeds_post`.`id`, `feeds_post`.`title`, `feeds_post`.`text`, `feeds_post`.`link`, `feeds_post`.`created_at`, `feeds_post`.`author`, `feeds_post`.`feed_id` FROM `feeds_post`
    INNER JOIN `feeds_userpost`
    ON (`feeds_post`.`id` = `feeds_userpost`.`post_id`)
    WHERE (`feeds_post`.`feed_id` = 14 AND `feeds_userpost`.`user_id` = 2 )
  3. Nazar Leush

    30.09.2008 03:05

    Прямо так дернуть наверно не удастся.

    Но такого рода задачу можно решить используя экстра селект: http://docs.djangoproject.com/en/dev//ref/models/querysets/#extra-select-none-where-none-params-none-tables-none-order-by-none-select-params-none

bbcode