2017-11-23 6 views
0

Django 1.11の使用ForeignKeyから継承するカスタムモデルフィールドを作成したいと思います。私は主にForeignKeyのフィールドと同じであるモデルフィールドを作りたいのですが、その代わり定義されたモデルクラスへのカスタムDjango ForeignKeyフィールド

class Car(models.Model): 
    manufacturer = models.ForeignKey(Company) 

が、1)が使用しています。通常のForeignKeyで

は、次のような何かを行うことができますformfieldの異なるデフォルトウィジェット、2)モデル名を位置パラメータとして配置する必要はありません。

# myapp/models.py 
from otherapp.fields import ManufacturerField 

class Car(models.Model): 
    manufacturer = ManufacturerField() 

は残念ながら、私は「当社」モデルがミックスに挿入を取得する子クラスののinitメソッドをオーバーライド苦労しています。ここでは(すべてではまだウィジェット上で動作していない)私がこれまでmodelfieldの方法で持っているものだ:私はこれをしようとすると

# otherapp/fields.py 
from otherapp.models import Company 

class ManufacturerField(models.ForeignKey): 

def __init__(self, *args, **kwargs): 
    return super(ContentField, self).__init__(Company, **kwargs) 

、私が取得:

TypeError: Couldn't reconstruct field manufacturer on myapp.Car: __init__() got multiple values for argument 'to' 

プロパティがありますカスタムmodelfieldクラスを設定して、これを特定の1つのモデルに対する外部キーにしたいと指定できますか?そうでない場合は、私のモデルをフィードする方法を正しく傍受する方法についてのアイデアはありますか?

答えて

0

super()明示的に基本クラスを参照してください。あなたはこれを理解するためにquestionを見ることができます。

def __init__(self, *args, **kwargs): 
    return super(ContentField, self).__init__(Company, **kwargs) 

である必要があります。

def __init__(self, *args, **kwargs): 
    return super(ManufacturerField, self).__init__(*args, **kwargs) 

ここでは、フィールドをカスタム化する方法を示します。example

関連する問題