强制多对多字段的顺序

时间:2012-08-14 10:17:19

标签: django django-orm

我为游戏中的每个玩家设置了一个记分模型,以及一个使用前一个并在游戏中对它们进行比较的匹配模型。

'p1'和'p2'字段仅作为控制器来识别我的问题发生的时间和地点。 他们在创建时获得了硬盘编码的用户ID。 (并且它们总是以递增的顺序创建; p2 始终 p1 + 1)

问题: 有时候,很少和完全无关紧要的东西,董事会的顺序被颠倒了。 由于我一直试图找到这个来源没有成功,我想尝试不同的方法。

有没有办法强制m2m-field中对象的顺序?

代码:

模型

class Scoreboard(models.Model):

    user = models.ForeignKey(User)

    score1 = models.IntegerField(default=0)

依旧......


   class Match(models.Model):
        pl1 = models.IntegerField(default=0)
        pl2 = models.IntegerField(default=0)
        boards = models.ManyToManyField(Scoreboard)
        active = models.IntegerField(default=0)
        turn = models.IntegerField(default=0)

我在想这样的事情:

views.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'是此函数的无效关键字参数

1 个答案:

答案 0 :(得分:1)

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

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', )
相关问题