0

ゲーム内の各プレイヤーのスコア保持モデルと、前のモデルを使用してゲーム内で比較するマッチモデルがあります。

'p1'および'p2'-フィールドは、問題がいつどこで発生したかを識別するためのコントローラーとしてのみ存在します。それらは、作成時にハードコードされたボードユーザーのユーザーIDを取得します。(そしてそれらは常に昇順で作成されます;p2は常にp1+ 1です)

問題:まれに、完全にランダムに見えるものが、ボードの順序が逆になることがあります。私はしばらくの間これの原因を見つけようとして成功しなかったので、別のアプローチを試してみたいと思います。

m2mフィールド内のオブジェクトの順序を強制する方法はありますか?

コード:

モデル

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'はこの関数の無効なキーワード引数です

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 に答える