Django错误:uuu init_uuuu()正好接受2个参数(给定3个)

Django错误:uuu init_uuuu()正好接受2个参数(给定3个),django,csv,sqlite,imdbpy,Django,Csv,Sqlite,Imdbpy,任何人都可以在我的代码中找到导致错误的原因?我已经搜索过了,但没有找到答案。我认为问题在于函数objects.get(param),但我不确定 我想用我的代码来检索对象类型、国家、语言和导演(如果他们已经被添加到数据库中) 代码如下: Models.py from django.db import models from numpy import unique class Director(models.Model): director = models.CharField(max_l

任何人都可以在我的代码中找到导致错误的原因?我已经搜索过了,但没有找到答案。我认为问题在于函数objects.get(param),但我不确定

我想用我的代码来检索对象类型、国家、语言和导演(如果他们已经被添加到数据库中)

代码如下:

Models.py

from django.db import models
from numpy import unique

class Director(models.Model):
    director = models.CharField(max_length=500, unique=True)

    def __unicode__(self):
        return self.director

    def __init__(self, director):
        super(Director, self).__init__()
        self.director = director

class Language(models.Model):
    language = models.CharField(max_length=500, unique=True)

    def __unicode__(self):
        return self.language

    def __init__(self, language):
        super(Language, self).__init__()
        self.language = language

class Genre(models.Model):
    genre = models.CharField(max_length=500, unique=True)

    def __unicode__(self):
        return self.genre

    def __init__(self, genre):
        super(Genre, self).__init__()
        self.genre = genre

class Country(models.Model):
    country = models.CharField(max_length=500, unique=True)

    def __unicode__(self):
        return self.country

    def __init__(self, country):
        super(Country, self).__init__()
        self.country = country

class Movie(models.Model):
    id_movie = models.CharField(max_length=200, unique=True)
    rating = models.CharField(max_length=200)
    votes = models.CharField(max_length=200)
    year = models.CharField(max_length=10)

    genre = models.ManyToManyField(Genre)
    country = models.ManyToManyField(Country)
    language = models.ManyToManyField(Language)
    directors = models.ManyToManyField(Director)

    def __init__(self, id_movie, rating, votes, year):
        super(Movie, self).__init__()
        self.id_movie = id_movie
        self.rating = rating
        self.votes = votes
        self.year = year

    def __unicode__(self):
        return self.id_movie
crawler.py

from movie_info.models import Movie, Genre, Director, Language, Country

def get_movie_info(codigo_do_filme):
    import imdb
    ia = imdb.IMDb()
    movie = ia.get_movie(codigo_do_filme)
    return {'titulo': movie['title'], 'rating': movie['rating'], 'votes': movie['votes'], 'ano': movie['year'], 'genero': movie['genre'][0], 'pais': movie['countries'][0], 'idioma': movie['lang'][0], 'directors': movie['director']} 

def read_sheet(file_name, fieldnames=None, delimiter=",", quotechar="\n"):
    from csv import DictReader
    reader = DictReader(open(file_name,'rb'), fieldnames = fieldnames, delimiter = delimiter, quotechar=quotechar)
    return reader


def fill_db_movie_info(the_sheet_file):
    file_csv = read_sheet(the_sheet_file)

    for movie in file_csv:
    id_filme = movie['id_move']

if not Movie.objects.filter(id_movie=id_filme).exists():

    info = get_movie_info(id_filme)
    rating_imdb = info['rating']
    movie_votes = info['votes']
    movie_year = info['ano']
    movie_genre = info['genero']
    movie_country = info['pais']
    movie_lang = info['idioma']        
    movie_directors = info['directors']

    addToDB = Movie(id_filme, rating_imdb, movie_votes, movie_year)
    addToDB.save()

    if not Genre.objects.filter(genre=movie_genre).exists():
        genreToDB = Genre(movie_genre)
        genreToDB.save()
        addToDB.genre.add(genreToDB)
    else:  
        addToDB.genre.add(Genre.objects.get(genre=movie_genre))


    if not Country.objects.filter(country=movie_country).exists():
        countryToDB = Country(movie_country)
        countryToDB.save()
        addToDB.country.add(countryToDB)
    else:
        addToDB.country.add(Country.objects.get(country=movie_country))


    if not Language.objects.filter(language=movie_lang).exists():
        langToDB = Language(movie_lang)
        langToDB.save()
        addToDB.language.add(langToDB)
    else:
        addToDB.language.add(Language.objects.get(language=movie_lang))


    for m_director in movie_directors:
        if not Director.objects.filter(director=m_director['name']).exists():
            directorsToDB = Director(m_director['name'])
            directorsToDB.save()
            addToDB.directors.add(directorsToDB)
        else:
            addToDB.directors.add(Director.objects.get(director=m_director['name']))

    print "salvou: " + id_filme, rating_imdb, movie_votes, movie_year, movie_genre, movie_country, movie_lang, movie_directors[0]
回溯:

    pydev debugger: starting (pid: 1424)
Traceback (most recent call last):
  File "/Applications/eclipse/plugins/org.python.pydev_3.5.0.201405201709/pysrc/pydevd.py", line 1845, in <module>
    debugger.run(setup['file'], None, None)
  File "/Applications/eclipse/plugins/org.python.pydev_3.5.0.201405201709/pysrc/pydevd.py", line 1373, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/Users/rubenspessoa/Documents/Workspace/LearningDjango/main.py", line 7, in <module>
    fill_db_movie_info('/Users/rubenspessoa/Documents/Workspace/DATASET/test_subdataset.csv')
  File "/Users/rubenspessoa/Documents/Workspace/LearningDjango/crawler.py", line 49, in fill_db_movie_info
    addToDB.country.add(Country.objects.get(country=movie_country))
  File "/Library/Python/2.7/site-packages/django/db/models/manager.py", line 151, in get
    return self.get_queryset().get(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 304, in get
    num = len(clone)
  File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 77, in __len__
    self._fetch_all()
  File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 857, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 230, in iterator
    obj = model(*row_data)
TypeError: __init__() takes exactly 2 arguments (3 given)
pydev调试器:正在启动(pid:1424) 回溯(最近一次呼叫最后一次): 文件“/Applications/eclipse/plugins/org.python.pydev_3.5.0.201405201709/pysrc/pydevd.py”,第1845行,在 运行(安装程序['file'],无,无) 文件“/Applications/eclipse/plugins/org.python.pydev_3.5.0.201405201709/pysrc/pydevd.py”,第1373行,正在运行 pydev_imports.execfile(文件、全局、局部)#执行脚本 文件“/Users/rubenspessoa/Documents/Workspace/LearningDjango/main.py”,第7行,在 填写电影信息('/Users/rubenspessoa/Documents/Workspace/DATASET/test_subdataset.csv') 文件“/Users/rubenspessoa/Documents/Workspace/LearningDjango/crawler.py”,第49行,在fill\u db\u movie\u info中 addToDB.country.add(country.objects.get(country=movie\u country)) 文件“/Library/Python/2.7/site packages/django/db/models/manager.py”,get中的第151行 返回self.get_queryset().get(*args,**kwargs) get中的文件“/Library/Python/2.7/site packages/django/db/models/query.py”,第304行 num=len(克隆) 文件“/Library/Python/2.7/site packages/django/db/models/query.py”,第77行,在__ self._fetch_all() 文件“/Library/Python/2.7/site packages/django/db/models/query.py”,第857行,全部 self.\u result\u cache=list(self.iterator()) 迭代器中的文件“/Library/Python/2.7/site packages/django/db/models/query.py”,第230行 obj=模型(*行数据) TypeError:\uuuu init\uuuuu()正好接受2个参数(给定3个)
您已经为所有模型定义了
初始化方法。你不应该那样做

尝试将
countryToDB,created=Country(movie\u Country)
更改为
countryToDB=Country.objects.get\u或\u create(movie\u Country)
为什么在类movie中使用init方法?把它取下来,正常做。karthikr,Slawek谢谢你们的帮助,伙计们。它正在工作。我删除了除Movie之外的所有其他类的init函数,并更改为get_或_create.:D