django - Django - Unique Together 引发错误。
问题描述
我正在关注 Django 应用程序的书籍教程(关键字:TDD,链接: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)
这是您的代码下降的地方,因为您将文本作为唯一字段。
推荐阅读
- azure-language-understanding - 使用复合实体还是分层实体?提高话语信心
- django - 找不到解决方案:django.core.exceptions.ImproperlyConfigured:包含的 URLconf 中似乎没有任何模式
- linux - 无法使用 Udoo neo 登录 u-boot 模式
- swift - Swift 4 - UICollectionView 上的 sizeForItemAt 没有调整整个单元格内容的大小
- forms - Symfony3为什么form.vars中的变量“标签”为空
- python - 正则表达式匹配python中的外大括号
- postman - keycloak 在 keycloak 中添加和列出用户
- java - 从运行服务中获取网站数据
- php - 如何在刀片内的 Laravel 关系函数中传递参数?
- php - php strpos 未检测到 # 标签字符