У меня есть модель CustomUser и модели, которые ссылаются на нее через отношения m2m:
class CustomUser(AbstractUser):
...
class Game(models.Model):
players = models.ManyToManyField(
CustomUser, related_name='games',)
Когда я получаю список игроков, я ожидал получить список игроков, «добавляя» порядок, однако игроки всегда отображаются в порядке «id» таблицы CustomUser.
...даже если CustomUser
не имеет порядка на уровне модели
и нигде в коде Django я не видел, чтобы в AbstractUser
была какая-то упорядоченность
user1=CustomUser.objects.get(id=1)
user2=CustomUser.objects.get(id=2)
user3=CustomUser.objects.get(id=3)
game=Game.objects.create()
game.players.add(user3)
game.players.add(user1)
game.players.add(user2)
game.players.all()
дарит всегда user1, user2, user3
Как мне получить список записей m2m в порядке «добавления» (user3, user1,user2
)?
Я думал попросить упорядочить набор запросов по «id» в сквозной таблице, но я не смог понять, как это сделать.
Может ли кто-нибудь показать мне, как я мог это сделать? ... или предложить мне рабочее решение?
заранее спасибо
Хорошо, после многих попыток я нашел одно удовлетворительное решение, упорядочив набор запросов по «id» в сквозной таблице.
Может пригодиться кому-то еще, поскольку, похоже, не так много доступных знаний об использовании неявной сквозной таблицы:
class Game(models.Model):
players = models.ManyToManyField(
CustomUser, related_name='games',)
def get_players(self):
# need to order_by to order by the id of the through table to ensure the players are listed by order of creation in game table.
# all other way end up to have the records ordered by user_id instead of order of joining the game
return self.players.through.objects.filter(game_id=self.id).order_by('id')