Как повторно сохранить ключ словаря с несколькими значениями в Python? - PullRequest
0 голосов
/ 16 марта 2019
{
 "캡틴마블": ["20018348", "81533"], 
 "이스케이프룸": ["20018925", "81654"], 
 "돈": ["20018920", "81651"], 
 "라스트미션": ["20018934", "81658"], 
 "우상": ["20018907", "81650"],
}

Я получил данные фильма и сохранил данные, как показано выше (в виде словаря). Я хочу сохранить их в моем проекте Django, но приведенный ниже код не работает для меня.

if __name__=='__main__':
    movie_data_dict = data #like above format Json file
    for t, m in movie_data_dict.items():
         MovieData(title=t, movie_cd=m[0], movie_idx=m[1]).save()

class MovieData(models.Model):
    title = models.CharField(max_length=20)
    movie_cd = models.IntegerField
    movie_idx = models.IntegerField

Выдается ошибка:

sqlite3.OperationalError: table parsed_data_movie_data has no column movie_idx
...
...
django.db.utils.OperationalError: table parsed_data_movie_data has no column movie_idx

Full error trace

Еще одна ошибка после makemigrations

Traceback (most recent call last):
  File "NameParser.py", line 48, in <module>
    MovieData(title=t, movie_cd=m[0], movie_idx=m[1] ).save()
  File "C:\Python\Python37\lib\site-packages\django\db\models\base.py", line 485, in __init__
    raise TypeError("'%s' is an invalid keyword argument for this function" % kwarg)
TypeError: 'movie_cd' is an invalid keyword argument for this function

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Вы неправильно настроили свои поля. В настоящее время Django ожидает, что ваши значения из вашего списка будут иметь тип IntegerField. Вам нужно либо использовать movie_cd=int(m[0]), movie_idx=int(m[1]), либо изменить ожидаемое поле на CharField.

0 голосов
/ 16 марта 2019

Я подозреваю, что вы добавили атрибут movie_idx в MovieData после того, как у вас уже была инициализированная база данных.Когда вы делаете это, вам нужно запустить manage.py -makemigrations, а затем manage.py -migrate (пока сервер не работает), чтобы добавить новый атрибут в вашу таблицу SQL.

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