Django Error: __init__() takes exactly 2 arguments (3 given)
Question: Anyone can find what is causing the error in my code? I already searched, but
didn't find an answer. I think the problem is with the function
objects.get(param), but I'm not sure.

What I wanted to do with my code was to retrieve the objects Genre, Country,
Language and Directors if they were already added to the database.

Here's the code:

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]
    

The Traceback:

    
    
        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)
    


Answer: You have defined `__init__` methods for all your models. You should not do
that.

