Я хочу сделать 'временную шкалу', содержащую все мини-сообщения в блоге от пользователя и всего пользователя, которого он читает. Я хочу, чтобы все эти сообщения были заказаны по дате., но как я могу 'присоединиться' к сообщениям, потому что 'следующее' отношение находится в другой таблице, таким образом, я должен сделать некоторое соединение между этими двумя таблицами для взятия данных.
На данный момент, в моей 'временной шкале', там появляется только сообщения в блоге владельца блога и меня пользователь запрос как:
blog = New.objects.filter(created_by = request.user)
но я хочу присоединиться там к сообщениям с сообщениями людей, за которыми он следует, имея в виду:
following = Relations.objects.filter(initiated_by = request.user)
где Отношения являются таблицей 'Follow relation'.
Как я могу сделать это?
Мои модели:
class New(models.Model):
post = models.CharField(max_length=120)
date = models.DateTimeField(auto_now_add=True)
created_by = models.ForeignKey(User, blank=True)
objects = NewManager()
class Relations(models.Model):
initiated_by = models.ForeignKey(User, editable=False, related_name = 'initiator')
date_initiated = models.DateTimeField(auto_now=True, editable = False)
follow = models.ForeignKey(User, editable = False, related_name = "follow")
date_follow = models.DateTimeField(auto_now=True, editable = False)
Может быть что-то вроде (с использованием объектов Q ):
blogs = New.objects.filter(Q(created_by = request.user) | Q(relations_set__initiated_by = request.user))
Предполагается, что у вас есть внешний ключ от Relations
до New
. См. документацию о обратных отношениях .
Если ваша модель Relations
не имеет внешнего ключа для New
, но имеет внешний ключ для таблицы пользователей, скажите following = models.ForeignKey (User)
, тогда вы можете сделать что-то вроде
blogs = New.objects.filter(Q(created_by = request.user) | Q(created_by__follow__initiated_by = request.user))
Теперь ваш внешний ключ из модели Relations
к модели пользователя должен иметь related_name = 'follow'
.