__init__() takes exactly 1 argument (7 given)

django, python

Solution

The problem is in

class Supplier(Person):

    def __init__(self):
        super(Supplier, self).__init__()

Have a look at django.db.models.Model source code

class Model(six.with_metaclass(ModelBase)):
    _deferred = False

    def __init__(self, *args, **kwargs):

Your `__init__` function get only the instance itself as argument, but django is passing probably more arguments. That's why you need to use `*args, **kwargs`.

To better understand `*args` and `**kwargs` you can have a look at this

Problem

What Is lacking in my implementation with this error Model: ``` class Person(models.Model): last_name = models.CharField(max_length=256) first_name = models.CharField(max_length=256) class Meta: abstract = True class Supplier(Person): def __init__(self): super(Supplier, self).__init__() class Item(models.Model): name = models.CharField(max_length=256) supplier = models.ForeignKey(Supplier) ... def __unicode__(self): return self.name ``` Views: ``` def ItemNew(request): if request.method == "POST": post_item = ItemNewForm(request.POST) ... else: item_form = ItemNewForm() return render(request, "item_new.html", { 'item_form' : item_form, }) ``` Forms: ``` class ItemNewForm(forms.ModelForm): class Meta: model = Item ``` Html: ``` ... <form method="POST" id="item_new_form"> {% csrf_token %} <label>Name : </label><<span>{{ item_form.name }}</span></span> <label>Supplier : </label><span>{{ item_form.supplier }}</span> <input type="submit" value="Add"> </form> ... ``` Backtrace: ``` TypeError at /item/add __init__() takes exactly 1 argument (7 given) Request Method: GET Request URL: Django Version: 1.5.4 Exception Type: TypeError Exception Value: __init__() takes exactly 1 argument (7 given) Exception Location: C:\Python27\lib\site-packages\django\db\models\query.py in iterator, line 327 Python Executable: C:\Python27\python.exe Python Version: 2.7.5 Python Path: ['E:\\projects\\WebPOS', 'E:\\tools\\ide\\eclipse\\plugins\\org.python.pydev_3.0.0.201311051910\\pysrc', 'E:\\projects\\WebPOS', 'C:\\Python27\\lib\\site-packages\\distribute-0.6.49-py2.7.egg', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg-info', 'C:\\WINDOWS\\SYSTEM32\\python27.zip', 'C:\\Python27\\lib\\plat-win'] Server time: Tue, 10 Dec 2013 07:45:07 +0800 Error during template rendering: In template E:\projects\WebPOS\base\templates\item_new.html, error at line 14 __init__() takes exactly 1 argument (7 given) 4 5 {% block sidebar %} 6 {% include "nav.html" %} 7 {% endblock %} 8 9 {% block content %} 10 <h3>Add New Item</h3> 11 <form method="POST" id="item_new_form"> 12 {% csrf_token %} 13 <div class="span-4"><label>Name : </label></div><div class="span-12 last"><span>{{ item_form.name }}</span></div> 14 <div class="span-4"><label>Supplier : </label></div><div class="span-12 last"><span>{{ item_form.supplier }}</span></div> 15 <div class="span-16 last"><input type="submit" value="Add"></div> 16 </form> 17 {% endblock %} 18 ```

Original source