代码之家  ›  专栏  ›  技术社区  ›  Diego-MX

Django-Unique一起引发错误。

  •  0
  • Diego-MX  · 技术社区  · 6 年前

    我正在学习Django应用程序的书籍教程(关键字:TDD,链接: here ,作者:哈里·珀西瓦尔),我做了一些小改动,现在破坏了我的代码。

    测验

    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 使用相同文本创建第二个游戏时的约束。但即使玩家有不同的名字,甚至将名字用作字符串表示,也会发生这种情况。

    有人知道怎么做吗?谢谢你的耐心。
    干杯

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ashish Kumar Verma    6 年前

    文本=模型。TextField(默认=),unique=True)

    这就是代码下降的原因,因为您将文本作为唯一字段。