я не могу сделать makemigrations в django 1.11 (fields.E312) - PullRequest
0 голосов
/ 05 января 2020

Класс игрока (модели. Модель):

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)

1 Ответ

0 голосов
/ 05 января 2020

Ниже приведены мои предложения, согласно моим возможностям.

Согласно документации,

Отношение многие-к-одному. Требуются два позиционных аргумента: класс, к которому относится модель, и опция on_delete.

См. Ссылку здесь . Таким образом, первый позиционный аргумент - это класс, связанный с Foreign Key, а второй позиционный аргумент - on_delete. Вы должны определить его как models.CASCADE или в зависимости от вашего приложения. Таким образом, в этом случае вторым позиционным аргументом является «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. Если вы хотите, чтобы он использовал столбец «name» из модели Player, вам нужно установить «unique = True» в поле имени модели Player. Также обратите внимание на использование опции 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)

Надеемся, он будет работать. Если ошибка не устранена, сообщите мне.

...