Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 31, 2009 15:39:19

niro
От:
Зарегистрирован: 2006-10-04
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Выборка сообщений

Есть две модели

class Posts(models.Model):
user = models.ForeignKey(User)
text = models.TextField()
date = models.DateTimeField(auto_now_add = True)
class Subscribe(models.Model):
user = models.ForeignKey(User, related_name = 'some1')
who = models.ForeignKey(User, blank=True, related_name = 'some2')
В первой сообщения, во второй читатели этих сообщений.
Вот выборка для пользователя, читающиего сообщения других пользователей:
# @name - имя пользователя которого читает request.user
ur = get_object_or_404(User, username = name)
subscribe = Subscribe.objects.filter(who = ur)
@subscribe - список объектов - пользователей, которых читате request.user

Нужно следать своеобразную выборку последних сообщений из таблицы Post других пользователей и передать это для object_list. Как это правильно реализовать ?



Офлайн

#2 Фев. 2, 2009 09:02:30

niro
От:
Зарегистрирован: 2006-10-04
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Выборка сообщений

Спасибо, lorien!
Судя по всему, ключевое здесь pk__in



Офлайн

#3 Фев. 2, 2009 15:16:04

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Выборка сообщений

Тут кстати не очень оптимально получается.

- Зачем тащить весь объект, когда нужен только первичный ключ?
- Почему бы не сделать вообще вcё в один запрос с подзапросом?

posts = Post.objects.filter(user__in=Subscribe.objects.filter(who__username=name).values("user").query)\
.order_by('-date')[:10]



Офлайн

#4 Фев. 2, 2009 17:01:25

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Выборка сообщений

Да это вроде даже не оптимизация, а просто good practice.



Офлайн

#5 Фев. 3, 2009 16:39:34

niro
От:
Зарегистрирован: 2006-10-04
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Выборка сообщений

А как модифицировать пример, чтобы получить список пользователей в порядке зависимости от количества подписчиков ?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version