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