2014-06-05 4 views
0

누구든지 내 코드에서 오류의 원인을 찾을 수 있습니까? 나는 이미 수색했지만 대답을 찾지 못했습니다. 나는 문제가 objects.get (param) 함수와 함께 있다고 생각하지만 확실하지 않다.Django 오류 : __init __()은 2 개의 인수 (3이 주어진 경우)

내가 코드로 원했던 것은 장르, 국가, 언어 및 디렉터가 데이터베이스에 이미 추가 된 경우 개체를 검색하는 것이 었습니다.

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] 

역 추적 : 당신은 __init__을 정의

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) 
+0

'countryToDB, created = 국가 (movie_country)'를'countryToDB = Country.objects.get_or_create (movie_country)'로 변경해보십시오. – karthikr

+0

왜 Movie 클래스에서 init 메소드를 사용하고 있습니까? 그것을 제거하고 정상적으로하십시오. –

+0

karthikr, Slawek 도움 주셔서 감사합니다. 이제 작동 중입니다. 나는 Movie 이외의 다른 모든 클래스의 __init__ 함수를 지우고 get_or_create로 변경했습니다. :디 – rubenspessoa

답변

1

이 충족 여기

코드입니다 모든 모델에 대한 hods. 너는 그렇게해서는 안된다.

관련 문제