#django #database #models
#django #База данных #Модели
Вопрос:
Я использую Django версии 1.10.1, и мне приходится использовать внешнюю базу данных с разрешением только для чтения. Я сгенерировал свои модели с помощью команд inspectdb. Все работает хорошо, пока я не изменил одно поле на внешний ключ, потому что я должен включить отношения, которые inspectdb не обнаруживает. У меня есть первичный ключ, определенный в обеих таблицах, но когда я определяю внешний ключ, django ищет поле идентификатора в ссылке, которого нет в базе данных.
Это ошибка, которую я получил: (1054, "Unknown column 'vicidial_callbacks.lead_id_id' in 'field list'")
И вот мои модели:
class VicidialList(models.Model):
_DATABASE = "dialer"
lead_id = models.AutoField(primary_key=True)
entry_date = models.DateTimeField(blank=True, null=True)
modify_date = models.DateTimeField()
status = models.CharField(max_length=50, blank=True, null=True)
user = models.CharField(max_length=20, blank=True, null=True)
vendor_lead_code = models.CharField(max_length=20, blank=True, null=True)
source_id = models.CharField(max_length=50, blank=True, null=True)
list_id = models.BigIntegerField()
class Meta:
managed = False
db_table = 'vicidial_list'
class VicidialCallbacks(models.Model):
_DATABASE = "dialer"
callback_id = models.AutoField(primary_key=True)
lead_id = models.ForeignKey(VicidialList, related_name='lead',to_field='lead_id')
list_id = models.BigIntegerField(blank=True, null=True)
campaign_id = models.CharField(max_length=8, blank=True, null=True)
status = models.CharField(max_length=10, blank=True, null=True)
class Meta:
managed = False
db_table = 'vicidial_callbacks'
Итак, почему Django ищет столбец id? Документы говорят, что Django хочет добавить свое собственное поле идентификатора, пока мы не определим primary_key…
Комментарии:
1. Не могли бы вы указать вызов, который выдает ошибку? Я думаю, я знаю, в чем ваша проблема…
2. @Remi Уверен, что ‘queryset = VicidialCallbacks.objects.using(‘дозвонщик’).select_related()’
3. Столкнувшись с той же проблемой, если вы нашли какое-то решение, пожалуйста, ответьте.