Django 强制多对多字段的顺序

Django 强制多对多字段的顺序,django,django-orm,Django,Django Orm,我有一个游戏中每个玩家的记分模型,还有一个使用前一个并在游戏中比较它们的比赛模型 “p1”和“p2”字段仅作为控制器,用于识别问题发生的时间和地点。 它们在创建时获得硬编码的board user的用户id。(它们总是按递增顺序创建;p2总是p1+1) 问题: 有时,董事会的顺序会颠倒过来,这种情况很少发生,而且看起来完全是随机的。 由于我一直试图找到这个问题的根源,但一段时间都没有成功,所以我想尝试一种不同的方法 有没有办法强制m2m场中对象的顺序 代码: 型号: class Scoreboar

我有一个游戏中每个玩家的记分模型,还有一个使用前一个并在游戏中比较它们的比赛模型

“p1”和“p2”字段仅作为控制器,用于识别问题发生的时间和地点。 它们在创建时获得硬编码的board user的用户id。(它们总是按递增顺序创建;p2总是p1+1)

问题: 有时,董事会的顺序会颠倒过来,这种情况很少发生,而且看起来完全是随机的。 由于我一直试图找到这个问题的根源,但一段时间都没有成功,所以我想尝试一种不同的方法

有没有办法强制m2m场中对象的顺序

代码:

型号

class Scoreboard(models.Model):

    user = models.ForeignKey(User)

    score1 = models.IntegerField(default=0)
等等


我是这样想的:

视图.py

results = Match.objects.get(id=matchID)
boards = results.boards.all()
board1 = boards[0]
board2 = boards[1]

boardList.append(board1)
boardList.append(board2)


if boards[0].id>boards[1].id:
    print boardList
    boardList.reverse()
    print boardList

    m=Match(id=matchID, boards=boardList)
    m.save()
但这给了我一个错误:
“boards”是此函数的无效关键字参数

您应该能够使用
类定义排序顺序,该类处理原始问题(未测试,小心处理):

看看这个答案
results = Match.objects.get(id=matchID)
boards = results.boards.all()
board1 = boards[0]
board2 = boards[1]

boardList.append(board1)
boardList.append(board2)


if boards[0].id>boards[1].id:
    print boardList
    boardList.reverse()
    print boardList

    m=Match(id=matchID, boards=boardList)
    m.save()
class ScoreBoard(models.Model):
    pass

class Match(models.Model):
    boards = models.ManyToManyField(ScoreBoard, through="MatchBoard")

class MatchBoard(models.Model):
    match = models.ForeignKey(Match)
    board = models.ForeignKey(ScoreBoard)
    sortorder = models.PositiveIntegerField()

    class Meta:
        ordering = ('sortorder', )