web-dev-qa-db-ja.com

djangoコンテンツタイプ-コンテンツタイプのモデルクラスを取得してインスタンスを作成する方法は?

タイトルの静止が明確かどうかはわかりませんが、次のケースを実行します。

_>>> from Django.contrib.contenttypes.models import ContentType
>>> ct = ContentType.objects.get(model='user')
>>> ct.model_class()
<class 'Django.contrib.auth.models.User'>
>>> ct_class = ct.model_class()
>>> ct_class.username = 'hellow'
>>> ct_class.save()
TypeError: unbound method save() must be called with User instance as first argument        (got nothing instead)
_

コンテンツタイプを介して取得したモデルをインスタンス化したいだけです。その後、form = create_form_from_model(ct_class)のようなことをして、このモデルフォームを使用できるようにする必要があります。

前もって感謝します!。

23
panchicore

クラスのインスタンスを作成する必要があります。 ct.model_class()は、クラスのインスタンスではなく、クラスを返します。次のことを試してください。

>>> from Django.contrib.contenttypes.models import ContentType
>>> ct = ContentType.objects.get(model='user')
>>> ct_class = ct.model_class()
>>> ct_instance = ct_class()
>>> ct_instance.username = 'hellow'
>>> ct_instance.save()
44
Blair

iPythonまたはオートコンプリートはあなたの親友です。問題は、Model自体でsaveを呼び出していることだけです。インスタンスでsaveを呼び出す必要があります。

ContentType.objects.latest('id').model_class()

some_ctype_model_instance = some_ctype.model_class()() 
some_ctype_model_instance.user = user
some_ctype_model_instance.save()

some_instance = some_ctype.model_class().create(...)