with tutorial the español applications python django django-contenttypes

python - tutorial - the django project



Tipos de contenido de django: ¿cómo obtener una clase de modelo de tipo de contenido para crear una instancia? (2)

No sé si estoy claro con la pregunta del título, lo que quiero hacer es el siguiente caso:

>>> 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)

Solo quiero instanciar cualquier modelo que obtenga a través de tipos de contenido. Después de eso tengo que hacer algo como form = create_form_from_model(ct_class) y tener este formulario modelo listo para usar.

¡Gracias de antemano!.


Necesitas crear una instancia de la clase. ct.model_class() devuelve la clase, no una instancia de ella. Intenta lo siguiente:

>>> 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()


iPython o autocompletar es tu mejor amigo. Su problema es que está llamando a guardar en el propio Model . Necesitas llamar guardar en una instancia.

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(...)