python - 如何修复“多个外键”Django
问题描述
我是 Django 新手(使用版本:2.1.5)(Python 3.6)并试图弄乱一些模型。我正在建立一个国际象棋数据库。这依赖于 3 个模型,玩家、游戏和构成游戏的动作。每场比赛都有一名白人球员和一名黑人球员,他们都是职业球员。这会引发错误:
<'class 'chessengine.admin.GameInline'>: (admin.E202) 'chessengine.Game' has more than one ForeignKey to 'chessengine.Player'.
我尝试使用参考名称删除了较早的相关错误,但不会处理上述错误。
//models.py
class Player(models.Model):
name = models.CharField(max_length=200)
birth_date = models.DateField('birthday')
def game_count(self):
return Player.objects.filter(Games__white_player=self.name).count() + Player.objects.filter(Games__black_player=self.name).count()
class Game(models.Model):
number = models.IntegerField()
date = models.DateField('date played')
moves = models.IntegerField()
white_player = models.ForeignKey(Player, on_delete=models.CASCADE, related_name='white_player')
black_player = models.ForeignKey(Player, on_delete=models.CASCADE, related_name='black_player')
result = models.CharField(max_length=8)
//admin.py
class GameInline(admin.TabularInline):
inlines = [MoveInline]
model = Game
class PlayerAdmin(admin.ModelAdmin):
fieldsets = [
('Player Information', {'fields': ['name', 'birth_date']}),
('Game Information', {'fields': ['date', 'player_white', 'player_black', 'result'], 'classes': ['collapse']}),
]
inlines = [GameInline]
list_display = ('name', 'birth_date', 'game_count')
list_filter = ['name']
解决方案
由于Game model
有多个 ForeignKey 到Player model
. 所以在定义时TabularInline for Game ie. GameInline
你必须fk_name
添加GameInline
class GameInline(admin.TabularInline):
inlines = [MoveInline]
model = Game
fk_name = 'white_player`
在此处阅读有关 fk_name的更多信息
推荐阅读
- php - 即使包含在 utf-8 (vscode, php) 中,我的函数也不会返回一些字母
- codeigniter-3 - 选项值 CodeIgniter 中未定义的变量
- python - 不能只将字节放入 private_bytes() 中的 Ed25519PrivateKey.generate() 在 python
- java - LuaJ中newInstance时如何覆盖java对象的方法
- reactjs - React-Hook-Form 与内置的 AntD 表单?
- java - 检测堆栈中的周期
- python - 如何在“结构化”甚至 10 年内进行 pandas 数据帧“十年重采样”?
- javascript - 反应,仅将一些文件附加到源代码1次
- javascript - 如何将javascript代码导入浏览器中的开发者工具?一次永远
- reactjs - 在不重新渲染的情况下添加类和样式的最佳方法是什么 - reactjs