Эта проблема не вызвана внешним ключом.Ошибка происходит в модели ветвей, которая, предположительно, также имеет мета-атрибут db_table
и основана на устаревшей таблице.
Вы должны определить первичный ключ для ваших моделей.Если вы этого не сделаете, Django сделает это автоматически и назовет это id
.В случае вашей модели Banks вы должны установить это поле id
как primary_key=True
- или действительно удалить его полностью, так как это значение по умолчанию.Вам также нужно найти подходящий pk для филиалов и объявить его в поле.
Для вашего реального вопроса вам не нужно ничего делать;Django автоматически установит FK так, чтобы он указывал на PK целевой модели.
class Bank(models.Model):
# removed `id` as that is the default PK
name = models.TextField()
class Meta:
db_table = 'banks'
class Branch(models.Model):
ifsc = models.CharField(max_length=20, primary_key=True) # assume this is the PK
bank = models.ForeignKey(Bank, on_delete=models.CASCADE)
branch = models.CharField(max_length=50)
class Meta:
db_table = 'branches'
Обратите также внимание, поскольку это устаревшие таблицы, которые вы, вероятно, захотите добавить managed = False
в оба мета-класса.И, как предлагает AKX, стиль Django делает названия моделей единичными;Вы можете сделать это, не затрагивая имя таблицы, поскольку оно объявлено явно.