我使用Django和我在运行使用Django模型Django的 - 类型错误:“类型”是这个函数
,我使用该脚本需要一个Python脚本问题无效的关键字参数从一个API,并将其加载到我的数据库的数据,但是,我得到一个类型错误,而试图运行它:
>>> exec(open('load_from_api.py').read())
Traceback (most recent call last):
File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\core\managem
ent\commands\shell.py", line 69, in handle
self.run_shell(shell=options['interface'])
File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\core\managem
ent\commands\shell.py", line 61, in run_shell
raise ImportError
ImportError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\db\models\qu
ery.py", line 465, in get_or_create
return self.get(**lookup), False
File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\db\models\qu
ery.py", line 387, in get
self.model._meta.object_name
movies.models.DoesNotExist: Movie matching query does not exist.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "<string>", line 24, in <module>
File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\db\models\ma
nager.py", line 122, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\db\models\qu
ery.py", line 467, in get_or_create
return self._create_object_from_params(lookup, params)
File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\db\models\qu
ery.py", line 499, in _create_object_from_params
obj = self.create(**params)
File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\db\models\qu
ery.py", line 399, in create
obj = self.model(**kwargs)
File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\db\models\ba
se.py", line 443, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % li
st(kwargs)[0])
TypeError: 'genre' is an invalid keyword argument for this function
电影模式:
class Movie(models.Model):
title = models.CharField(max_length=511)
tmdb_id = models.IntegerField(null=True, blank=True)
release = models.DateField(null=True, blank=True)
poster = models.TextField(max_length=500)
backdrop = models.TextField(max_length=500, null=True, blank=True)
rating = models.FloatField(null=True, blank=True)
description = models.TextField()
director = models.ManyToManyField(Person, related_name="directed_movies")
actors = models.ManyToManyField(Person, related_name="acted_movies")
genre = models.ManyToManyField(Genre)
和我使用从脚本片段:
for movie in results:
data = Movie.objects.get_or_create(title=movie['title'],
tmdb_id=movie['id'],
release=movie['release_date'],
genre=movie['genre_ids'],
description=movie['overview'],
backdrop=movie['backdrop_path'],
poster=movie['poster_path'])
电影[ 'genre_ids']来以列表的形式:例如[42,67,80]或[12,109]。
我不确定我在哪里错了,任何帮助将不胜感激!
编辑:
当我改变了我的脚本是:
for movie in results:
data = Movie.objects.get_or_create(title=movie['title'],
tmdb_id=movie['id'],
release=movie['release_date'],
description=movie['overview'],
backdrop=movie['backdrop_path'],
poster=movie['poster_path'])
genres = []
genres = movie['genre_ids']
for gnre in genres:
data.genre.add(gnre)
它给了我下面的错误:
AttributeError: 'tuple' object has no attribute 'genre'
看起来你需要做'makemigrations'和'migrate' –
在应用程序检测到没有任何变化! – mari
请参阅[此问题](http://stackoverflow.com/questions/12254033/django-get-or-create-return-error-tuple-object-has-no-attribute/12254139#12254139)来解释属性错误。 – Alasdair