Estoy usando Django 1.11 e intenté crear modelos dinámicos de Django consultando este enlace https://code.djangoproject.com/wiki/DynamicModels , ejecutando todos y cada uno de los pasos, se ejecuta sin ningún problema, pero cuando veo el registrado modelo en el panel de administración de Django, el modelo es visible debajo de la aplicación correspondiente, pero no está accesible, no sé qué me perdí.
def create_model(name, fields=None, app_label='', module='', options=None, admin_opts=None): """ Create specified model """ class Meta: # Using type('Meta', ...) gives a dictproxy error during model creation pass if app_label: # app_label must be set using the Meta inner class setattr(Meta, 'app_label', app_label) # Update Meta with any options that were provided if options is not None: for key, value in options.iteritems(): setattr(Meta, key, value) # Set up a dictionary to simulate declarations within a class attrs = {'__module__': module, 'Meta': Meta} # Add in any fields that were provided if fields: attrs.update(fields) # Create the class, which automatically triggers ModelBase processing model = type(name, (models.Model,), attrs) # Create an Admin class if admin options were provided if admin_opts is not None: class Admin(admin.ModelAdmin): pass for key, value in admin_opts: setattr(Admin, key, value) admin.site.register(model, Admin) return modelConsulte esta imagen como referencia:
Aquí, el modelo Test 11 se crea mediante el método de modelo dinámico, no puedo acceder a ese modelo, el botón Agregar/Cambiar tampoco está allí y cuando elimino el servidor y lo reinicio, ese modelo creado dinámicamente se oculta.
¿Cómo puedo acceder a este modelo? ¿Me perdí algún paso aquí o qué hay de malo en ello?
Tuve el mismo problema, pero unas pocas líneas de código lo resolvieron. Deberá registrar sus modelos dinámicos y luego volver a cargar y borrar su caché. Se verá algo como esto:
from django.contrib import admin from django.core.urlresolvers import clear_url_caches from django.utils.module_loading import import_module admin.site.register(model, admin_options) reload(import_module(settings.ROOT_URLCONF)) clear_url_caches()