Сложность создания ограничения ForeignKey в Django - PullRequest
0 голосов
/ 28 февраля 2020
class Campaign(models.Model):
    id = models.AutoField(primary_key=True)
    campaign_name = models.TextField()    

class SessionLog(models.Model):
    date = models.DateField()
    campaign_name = models.ForeignKey(Campaign, on_delete=models.CASCADE)

ОШИБКА С ВЕБ-САЙТА:

OperationalError в / admin / session / sessionlog / (1054, «Неизвестный столбец« session_log.campaign_name_id »в« списке полей »))

ЧТО Я ПЫТАЮСЯ СДЕЛАТЬ: создайте раскрывающийся список на SessionLog, чтобы заполнить название кампании на основе записей в Campaign. Я новичок в задании вопросов. Пожалуйста, будьте добры, если я объяснил себя неправильно.

Я пытался учиться сам. Я прочитал и перечитал, посмотрел и просмотрел StackOverflow, а затем прочитал еще несколько, когда указал в этом направлении: https://docs.djangoproject.com/en/3.0/topics/db/models/#many -в-один-отношения

Я попробовал первый ответ, который дал привел меня к тому, чтобы попробовать и другие разные вещи. В конце концов, я продолжаю видеть это через веб-сайт:

ignored_wrapper_args    
(False,
 {'connection': <django.db.backends.mysql.base.DatabaseWrapper object at 0x7f5d3768ec88>,
  'cursor': <django.db.backends.utils.CursorDebugWrapper object at 0x7f5d375a5240>})
params  
()
self    
<django.db.backends.utils.CursorDebugWrapper object at 0x7f5d375a5240>
sql 
('SELECT `session_log`.`id`, `session_log`.`date`, '
 '`session_log`.`campaign_name_id`,

В конце концов, вы видите, что он продолжает пытаться найти кампанию_имя_идентификации .. которая не существует. Я не могу найти где-нибудь, где я сказал, чтобы найти его.

И когда я дважды проверяю, правильно ли настроена моя таблица базы данных sessionlog, я вижу это через MySQL

mysql> describe session_log;
+---------------------+----------+------+-----+---------+----------------+
| Field               | Type     | Null | Key | Default | Extra          |
+---------------------+----------+------+-----+---------+----------------+
| id                  | int(11)  | NO   | PRI | NULL    | auto_increment |
| date                | date     | NO   |     | NULL    |                |
| campaign_name       | tinytext | NO   |     | NULL    |                |
| chapter_name        | tinytext | NO   |     | NULL    |                |
| scene_name          | tinytext | NO   |     | NULL    |                |
| character_name      | tinytext | NO   |     | NULL    |                |
| location_name       | tinytext | YES  |     | NULL    |                |
| npc_name            | tinytext | YES  |     | NULL    |                |
| monster_name        | tinytext | YES  |     | NULL    |                |
| item_name           | tinytext | YES  |     | NULL    |                |
| loot_pp             | int(11)  | YES  |     | NULL    |                |
| loot_gp             | int(11)  | YES  |     | NULL    |                |
| loot_ep             | int(11)  | YES  |     | NULL    |                |
| loot_sp             | int(11)  | YES  |     | NULL    |                |
| loot_cp             | int(11)  | YES  |     | NULL    |                |
| session_xp          | int(11)  | YES  |     | NULL    |                |
| session_strongstart | tinytext | YES  |     | NULL    |                |
| session_secrets     | tinytext | YES  |     | NULL    |                |
| session_clues       | tinytext | YES  |     | NULL    |                |
| session_notes       | text     | YES  |     | NULL    |                |
+---------------------+----------+------+-----+---------+----------------+
20 rows in set (0.00 sec)

Ответы [ 3 ]

0 голосов
/ 28 февраля 2020

Похоже, вы не осуществили миграцию.

0 голосов
/ 02 марта 2020

Я удалил идентификатор, думая, что должен, потому что django создает свой собственный. Что ж, это вызвало много ошибок.

Я перестроил с нуля, убедился, что в моей настройке БД были идентификатор и индекс, а также несколько внешних ключей и wala! Все лучше. :) Сделал соответствующие шаги makemigration и migrate. :)

Спасибо за все ваши указатели в правильном направлении!

0 голосов
/ 28 февраля 2020
class Campaign(models.Model):
    id = models.AutoField(primary_key=True)
    campaign_name = models.TextField()

    def __str__(self):
        return self.campaign_name    

class SessionLog(models.Model):
    date = models.DateField()
    campaign_name = models.ForeignKey("appname.Campaign", on_delete=models.CASCADE)

Замените имя приложения на Django имя приложения. Я надеюсь, что это может помочь вам с вашей проблемой. И вы зарегистрировали свою модель в файле admins.py.

Я не уверен, что вы получаете ошибку при получении данных из базы данных или мониторинга на странице администратора.

...