Как я могу отсортировать по идентификатору ManyToManyField в Django?

У меня есть 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")

Это даст мне список пользователей, которых читает пользователь, но заказанный тем, когда они присоединились. Я хочу порядок следующего списка быть в порядке того, когда пользователь следовал за ними.

9
задан Tim Trueman 15 December 2009 в 18:57
поделиться

1 ответ

Я не уверен, можно ли добиться этого с помощью обычного 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, где описывается, как указать промежуточную модель в модели «многие ко многим». отношения.

0
ответ дан 4 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: