Django - Unique Together 引发错误。
Django - Unique Together raises error.
我正在关注 Django 应用程序的书籍教程(关键字:TDD,link:here,作者:Harry Percival),我做了一些小改动,现在破坏了我的代码。
测试
def test_saves_same_game_with_different_players(self):
player1 = Player.objects.create(name="Player1")
player2 = Player.objects.create(name="Player2")
Game.objects.create(player=player1, text="score: other_player")
game2 = Game.objects.create(player=player2, text="score: other_player")
game2.full_clean() # Should not raise.
型号
class Player(models.Model):
name = models.TextField(default="")
objects = models.Manager()
def __str__(self):
return self.name
class Game(models.Model):
player = models.ForeignKey(Player, default=None)
text = models.TextField(default="", unique=True)
objects = models.Manager()
def __str__(self):
return self.text
class Meta:
ordering = ("id",)
unique_together = ("player", "text")
错误
...
game2 = Game.objects.create(player=player2, text="score: other_player")
...
IntegrityError: UNIQUE constraint failed: games_game.text
还有sqlite
。
使用相同文本创建第二个游戏时,错误与 unique_together
约束有关。但即使玩家有不同的名字,甚至使用名字作为字符串表示,也会发生这种情况。
有人知道怎么做吗?感谢您的耐心等待。
干杯。
text = models.TextField(default="", unique=True)
这是您的代码失败的地方,因为您将文本作为唯一字段。
我正在关注 Django 应用程序的书籍教程(关键字:TDD,link:here,作者:Harry Percival),我做了一些小改动,现在破坏了我的代码。
测试
def test_saves_same_game_with_different_players(self):
player1 = Player.objects.create(name="Player1")
player2 = Player.objects.create(name="Player2")
Game.objects.create(player=player1, text="score: other_player")
game2 = Game.objects.create(player=player2, text="score: other_player")
game2.full_clean() # Should not raise.
型号
class Player(models.Model):
name = models.TextField(default="")
objects = models.Manager()
def __str__(self):
return self.name
class Game(models.Model):
player = models.ForeignKey(Player, default=None)
text = models.TextField(default="", unique=True)
objects = models.Manager()
def __str__(self):
return self.text
class Meta:
ordering = ("id",)
unique_together = ("player", "text")
错误
...
game2 = Game.objects.create(player=player2, text="score: other_player")
...
IntegrityError: UNIQUE constraint failed: games_game.text
还有sqlite
。
使用相同文本创建第二个游戏时,错误与 unique_together
约束有关。但即使玩家有不同的名字,甚至使用名字作为字符串表示,也会发生这种情况。
有人知道怎么做吗?感谢您的耐心等待。
干杯。
text = models.TextField(default="", unique=True)
这是您的代码失败的地方,因为您将文本作为唯一字段。