我为游戏中的每个玩家设置了一个记分模型,以及一个使用前一个并在游戏中对它们进行比较的匹配模型。
'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'是此函数的无效关键字参数
答案 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', )