python - pelicula - django windows




La definición de una clase de modelo en el shell de Django falla (2)

Esa otra respuesta definitivamente funciona para el indicador interactivo, sin embargo, no creo que la intención del primer bloque de código fuera la intención de ejecutarse. Inmediatamente después de ese código en la documentación de los modelos , se espera que coloque los siguientes códigos en su archivo models.py creado durante el tutorial anterior ... Supongo que por eso etiquetaron esa sección como "Ejemplo rápido". ¡Qué dolor de cabeza para mí también!

cuando uso el shell Django, muestra un error; este es el error

>>> from django.db import models
>>> class Poll(models.Model):
...     question = models.CharField(max_length=200)
...     pub_date = models.DateTimeField('date published')
...
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "D:\Python25\lib\site-packages\django\db\models\base.py", line 51, in __new__
    kwargs = {"app_label": model_module.__name__.split('.')[-2]}
IndexError: list index out of range

¿Que puedo hacer?


La definición del modelo debe aparecer en una aplicación; el error que está viendo es que intenta tomar __name__ model_module - que debería ser algo como project.appname.models para project\appname\models.py - y obtener el nombre de la aplicación , appname . En la consola interactiva, el __name__ del módulo es '__main__' , por lo que falla.

Para app_label esto, deberá especificar la app_label en la clase Meta ;

>>> from django.db import models
>>> class Poll(models.Model):
...     question = models.CharField(max_length=200)
...     pub_date = models.DateTimeField('date published')
...     class Meta:
...         app_label = 'test'

Para obtener una explicación de por qué puede hacer eso, consulte el archivo mencionado en el rastreo, D:\Python25\lib\site-packages\django\db\models\base.py :

    if getattr(meta, 'app_label', None) is None:
        # Figure out the app_label by looking one level up.
        # For 'django.contrib.sites.models', this would be 'sites'.
        model_module = sys.modules[new_class.__module__]
        kwargs = {"app_label": model_module.__name__.split('.')[-2]}
    else:
        kwargs = {}

(Donde meta es la clase Meta , vea justo arriba en ese archivo).





django