Подтвердить что ты не робот

Типы содержимого django - как получить класс класса контента для создания экземпляра?

Я не знаю, если im clear с заголовком заголовка, то, что я хочу сделать, это следующий случай:

>>> 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)  и получить эту модель готовой к использованию.

Заранее спасибо!

4b9b3361

Ответ 1

Вам нужно создать экземпляр класса. 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()

Ответ 2

iPython или автозаполнение - ваш лучший друг. Ваша проблема заключается в том, что вы вызываете save на самом Model. Вам нужно вызвать 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(...)