我无法在Django 1.11(fields.E312)中进行makemigrations

问题描述 投票:0回答:1

class Player(models.Model):

name = models.CharField(max_length = 256)

number = models.IntegerField()

age = models.IntegerField()

is_captain = models.BooleanField(default = False)

类伤害(models.Model):

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

team = models.ForeignKey(Team)
python-3.6 django-1.11
1个回答
0
投票

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

根据文档,

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

请参见参考文献here。因此,第一个位置参数是与外键相关的类,第二个位置参数是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模型中的“名称”列,则必须在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)

希望它能正常工作。如果仍然有错误,请通知我。

© www.soinside.com 2019 - 2024. All rights reserved.