0

我为游戏中的每个玩家都有一个记分模型,以及一个使用前一个并在游戏中比较它们的匹配模型。

'p1' 和 'p2' 字段仅作为控制器用于识别我的问题发生的时间和地点。他们在创建时获得硬编码的 board-user 的用户 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)

我在想这样的事情:

视图.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' is an invalid keyword argument for this function

4

1 回答 1

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', )
于 2012-08-14T11:43:05.073 回答