Django crea automáticamente un campo de identificación como clave principal.
Ahora necesito obtener el objeto por esta identificación.
object = Class.objects.filter()
¿Cómo escribir este filtro?
Django crea automáticamente un campo de identificación como clave principal.
Ahora necesito obtener el objeto por esta identificación.
object = Class.objects.filter()
¿Cómo escribir este filtro?
Respuestas:
Si desea obtener un objeto, usarlo get()
es más sencillo:
obj = Class.objects.get(pk=this_object_id)
id
en una función incorporada que devuelve la identidad de un objeto. En la mayoría de los casos, hacer referencia a cosas con id
hará lo correcto, por ejemplo, Class.objects.get(id=this_object_id)
funcionará. Pero eso es algo a considerar, supongo.
Llegué aquí por el mismo problema, pero por una razón diferente:
Class.objects.get(id=1)
Este código estaba generando una excepción ImportError. Lo que me confundió fue que el código a continuación se ejecutó bien y devolvió un conjunto de resultados como se esperaba:
Class.objects.all()
Cola del rastreo del 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
Al leer el código dentro de Django loading.py
, llegué a la conclusión de que settings.py
tenía una ruta incorrecta a mi aplicación que contiene la Class
definición de mi modelo. Todo lo que tuve que hacer fue corregir la ruta a la aplicación y el get()
método se ejecutó bien.
Aquí está mi settings.py
con la ruta corregida:
INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
# ...
'mywebproject.myapp',
)
Toda la confusión se debió a que estoy usando el ORM de Django como independiente, por lo que el espacio de nombres tenía que reflejar eso.
Puedes usar:
objects_all=Class.objects.filter(filter_condition="")
Esto devolverá un conjunto de consultas incluso si obtiene un objeto. Si necesita exactamente un objeto, utilice:
obj=Class.objects.get(conditon="")
También puede usar el acceso directo get_object_or_404 de django. Genera un error 404 si no se encuentra el objeto.
pk
es la forma preferida de referirse a la clave principal para cualquier modelo. Elid
campo solo se genera si el autor del modelo no designa específicamente una clave principal. Si el autor hizo especificar un campo de clave principal que no se nombraid
, entonces no habrá unid
campo.