我不能在 django 1.11 (fields.E312) 中做 makemigrations

i can't do makemigrations in django 1.11 (fields.E312)

class 玩家(models.Model):

name = models.CharField(max_length = 256)

number = models.IntegerField()

age = models.IntegerField()

is_captain = models.BooleanField(default = False)

class 受伤(models.Model):

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

team = models.ForeignKey(Team)

以下是我的建议,量力而行。

根据文档,

A many-to-one relationship. Requires two positional arguments: the class to which the model is related and the on_delete option.

参见参考资料 here。所以第一个位置参数是 class,它由外键关联,第二个位置参数是 on_delete。您应该将其定义为 models.CASCADE 或适合您的应用程序。 因此,在这种情况下,第二个位置参数是 "Player.name"。我认为您必须先将其替换为 models.CASCADE.

因此更改下面的代码

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)

外键设置为相关模型的主键。在这种情况下(因为你还没有定义它),django 会自动分配 player_id 。如果你想让它强制使用 Player 模型的 "name" 列,那么你必须在 Player 模型的名称字段中设置 "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)

希望它能奏效。如果还有错误,请告诉我。