Django: добавление 2 внешних ключей, ссылающихся на одну и ту же таблицу с использованием related_name, вызывающее NameError - значение, присвоенное связанному имени, не определено - PullRequest
0 голосов
/ 21 мая 2019

Я создаю модель в Django с 2 основными классами - классом соответствия и классом игрока. В каждом матче должны быть взяты 2 игрока из базы данных, поэтому я включил внешние ключи в таблицу, но они конфликтуют, так как я дважды ссылаюсь на класс игрока в классе матча.

Я пытался использовать поле related_name, чтобы предотвратить эти конфликты, как видно из кода ниже. Хотя этот пример работает для других пользователей, я получаю сообщение об ошибке, утверждающее, что имя, объявленное в related_name, не определено. Изменение значения related_name изменяет содержание ошибки.

class Player(models.Model):
    p_pub_date = models.DateTimeField('date published')
    p_username = models.CharField(max_length=20)
    p_tag = models.CharField(max_length=20)
    p_league_id = models.ForeignKey(League, on_delete=models.CASCADE)
    p_elo_rating = models.IntegerField(default=1200)
    p_glicko_rating = models.IntegerField(default=1200)
    p_character = models.CharField(max_length=20)
    p_country = models.CharField(max_length=50)

class Match(models.Model):
    m_pub_date = models.DateTimeField('date published')
    m_tournament_id = models.ForeignKey(Tournament, on_delete=models.CASCADE)
    m_player0_id = models.ForeignKey(Player, on_delete=models.CASCADE, related_name=m_player0_id)
    m_player1_id = models.ForeignKey(Player, on_delete=models.CASCADE, related_name=m_player1_id)
    m_result = models.IntegerField(default=0)

Когда я запускаю makemigrations, я получаю сообщение об ошибке в моем файле models.py: m_player0_id = models.ForeignKey (Player, on_delete = models.CASCADE, related_name = m_player0_id) NameError: имя 'm_player0_id' не определено

Заранее спасибо

1 Ответ

2 голосов
/ 21 мая 2019

вам нужно использовать кавычки

m_player0_id = models.ForeignKey(Player, on_delete=models.CASCADE, related_name='m_player0_id')
m_player1_id = models.ForeignKey(Player, on_delete=models.CASCADE, related_name='m_player1_id')

также я бы выбрал другое связанное имя, например 'matches_as_p1' 'matches_as_p2' возможно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...