我不能在 Django 1.11 中进行迁移(字段。E312)



class Player(models.型号(:

name = models.CharField(max_length = 256)
number = models.IntegerField()
age = models.IntegerField()
is_captain = models.BooleanField(default = False)

类伤害(模型。型号(:

player = models.ForeignKey(Player, Player.name)
team = models.ForeignKey(Team)

以下是我根据我的能力提出的建议。

根据文档,

多对一关系。需要两个位置参数: 与模型相关的类和on_delete选项。

请参阅此处的参考资料。因此,第一个位置参数是与外键相关的类,第二个位置参数是on_delete。应将其定义为模型。级联或适合您的应用。 因此,在这种情况下,第二个位置参数是"Player.name"。我认为您必须首先将其替换为模型。级 联。

因此,从下面的代码更改代码

class Injuries(models.Model):
player = models.ForeignKey(Player, Player.name)
team = models.ForeignKey(Team)

到下面的一个

class Injuries(models.Model):
player = models.ForeignKey(Player, on_delete=models.CASCADE)
team = models.ForeignKey(Team)

外键设置为相关模型的主键。在这种情况下(因为你还没有定义它(,它将player_id由 django 自动分配。如果希望它强制它使用播放器模型中的"名称"列,则必须在播放器模型的名称字段中设置"unique=True"。另请注意使用 to_field='name' 选项。

在这种情况下,更改后的代码将如下所示。

class Player(models.Model):
name = models.CharField(max_length = 256, unique=True)
number = models.IntegerField()
age = models.IntegerField()
is_captain = models.BooleanField(default = False)
class Injuries(models.Model):
player = models.ForeignKey(Player, to_field='name', on_delete=models.CASCADE)
team = models.ForeignKey(Team)

希望它会起作用。如果仍有错误,请告诉我。

最新更新