У меня есть ManyToManyField в пользовательском объекте, и он используется для отображения пользователей, которых читает пользователь. Я пытаюсь показать список подмножества того, за кем они последний раз следовали. Существует ли прием в .order_by (), который позволит мне виду идентификатором ManyToManyField? Данные там, правильно?
# (people the user is following)
following = models.ManyToManyField(User, related_name="following", blank=True)
theuser.following.filter(user__is_active=True).order_by("user__id")
Это даст мне список пользователей, которых читает пользователь, но заказанный тем, когда они присоединились. Я хочу порядок следующего списка быть в порядке того, когда пользователь следовал за ними.
Я не уверен, можно ли добиться этого с помощью обычного ManytoManyField
. Вы можете попробовать определить промежуточную модель явно.
nb: Непроверенный код!
class Person(models.Model)
name = models.CharField(max_length=30)
class FollowerRelationship(models.Model)
follower = models.ForeignKey(Person, related_name = following_set)
following = models.ForeignKey(Person, related_name = follower_set)
Затем вы можете создать следующие отношения в оболочке следующим образом.
# Create Person objects
>>> a = Person(name="Alice")
>>> a.save()
>>> b = Person(name="Bob")
>>> b.save()
>>> c = Person(name="Chris")
>>> c.save()
# Let Alice follow Chris and Bob
>>> FollowerRelationship.objects.create(follower=a, following=c)
>>> FollowerRelationship.objects.create(follower=a, following=b)
Вы можете создать набор запросов из FollowerRelationship
объектов, где Алиса - это последователь, упорядоченный по идентификатору таблицы соединения, со строкой:
>>> qs = FollowerRelationship.objects.filter(follower=a).order_by('id')
>>> [fr.following for fr in qs]
Обратите внимание, что вам нужно пройти через объекты FollowerRelationship
, чтобы получить «отслеживаемый» Person
] в отношении.
Вы также можете посмотреть Дополнительные поля в отношениях «многие ко многим» в документации Django, где описывается, как указать промежуточную модель в модели «многие ко многим». отношения.