2010-11-29 9 views

Respuesta

92

Si desea obtener un objeto, utilizando get() es más directo:

obj = Class.objects.get(pk=this_object_id) 
+9

FYI, 'pk' es la forma preferida de referirse a la clave principal para cualquier modelo. El campo 'id' solo se genera si el autor del modelo no designa específicamente una clave principal. Si el autor * no * especificó un campo de clave principal que no se llama 'id', entonces no habrá un campo 'id'. –

+0

También FYI, 'id' en una función incorporada que devuelve la identidad de un objeto. En la mayoría de los casos, hacer referencia a cosas por 'id' hará lo correcto, p. 'Class.objects.get (id = this_object_id)' trabajo. Pero eso es algo a considerar, supongo. – Tom

9

llegué aquí por el mismo problema, pero por una razón diferente:

Class.objects.get(id=1) 

Este código estaba criando una excepción ImportError. Lo que me estaba confundiendo fue que el código de abajo ejecutado bien y devuelve un conjunto de resultados como se esperaba:

Class.objects.all() 

Cola del rastreo para el get() método:

File "django/db/models/loading.py", line 197, in get_models 
    self._populate() 
File "django/db/models/loading.py", line 72, in _populate 
    self.load_app(app_name, True) 
File "django/db/models/loading.py", line 94, in load_app 
    app_module = import_module(app_name) 
File "django/utils/importlib.py", line 35, in import_module 
    __import__(name) 
ImportError: No module named myapp 

lectura del código dentro de Django de loading.py, me Llegué a la conclusión de que mi settings.py tenía una mala ruta a mi aplicación que contiene mi definición de modelo Class. Todo lo que tuve que hacer fue corregir el camino a la aplicación y el método get() ejecutado correctamente.

Aquí es mi settings.py con la trayectoria de corrección:

INSTALLED_APPS = (
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    # ... 
    'mywebproject.myapp', 

)

Toda la confusión fue causada porque estoy utilizando ORM de Django como un independiente, por lo que el espacio de nombres tenía que reflejar eso.

Cuestiones relacionadas