2012-09-08 27 views
0

我有一個模型,看起來像這樣:Django的構造函數和混入

class Base(models.Model): 
    pass 

class Mixin1(Base): 
    active = models.BooleanField(default=False) 

class Mixin2(Base): 
    name = models.CharField(max_length=200,blank=False,null=False) 

class Organization(Mixin1, Mixin2, Base): 
    pass 

這工作得很好:

organization = Organization(name='name') 
organization.active = True 
organization.save() 

但這並不:上

organization = Organization(name='name', active=True) 
organization.save() 

Django的錯誤了構造函數與:

TypeError: 'active' is an invalid keyword argument for this function 

a有沒有關於mixin的信息?

更新我所看到的: 使用新鮮的PostgreSQL數據庫和全新的shell。

Python 2.7.3 (default, Sep 5 2012, 20:48:07) 
[GCC 4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang-421.0.60))] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> from core.models.organizations import Organization 
>>> org1 = Organization(name='name') 
>>> org1 
<Organization: name> 
>>> org1.active = True 
>>> org1 
<Organization: name> 
>>> org1.active 
True 
>>> org2 = Organization(name='org2',active=True) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "<myprojectpath>/venv/lib/python2.7/site-packages/django/db/models/base.py", line 367, in __init__ 
    raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]) 
TypeError: 'active' is an invalid keyword argument for this function 
>>> 

回答

2

它的工作原理,我只是試過。

In [2]: model = Model(name='name') 
In [3]: model.active = True 
In [4]: model.save() 

In [5]: model = Model(name='name2', active=True) 
In [6]: model.save() 

In [9]: Model.objects.all() 
Out[9]: [<Model: Model object>, <Model: Model object>] 

該問題應該在其他地方。

+0

好吧,讓我看看在我編輯的代碼中是否還有別的事情發生。謝謝。 – Erik

+0

你在使用什麼樣的數據庫?我的是PostgreSQL。 – Erik

+0

嘗試同步數據庫並重新啓動外殼實例。如果您在shell啓動後編輯代碼,shell將不會知道這些更改。 –

2

我有一個陳舊的.pyc文件掛在附近搞砸了。我將文件從organization.py更改爲organizational.py。出於某種原因,organization.pyc停留在另一個模型文件中並被導入。令人沮喪。

+1

您可以使用django擴展中的clean_pyc來防止進一步的問題。 –

+0

關於clean_pyc的絕佳建議 - 尤其是因爲我已經在使用django-extensions了。 – Erik