Django crea automaticamente un campo id come chiave primaria.
Ora ho bisogno di ottenere l'oggetto da questo ID.
object = Class.objects.filter()
Come scrivere questo filtro?
Django crea automaticamente un campo id come chiave primaria.
Ora ho bisogno di ottenere l'oggetto da questo ID.
object = Class.objects.filter()
Come scrivere questo filtro?
Risposte:
Se vuoi ottenere un oggetto, l'uso get()
è più semplice:
obj = Class.objects.get(pk=this_object_id)
id
in una funzione incorporata che restituisce l'identità di un oggetto. Nella maggior parte dei casi, fare riferimento a cose per id
farà la cosa giusta, ad es Class.objects.get(id=this_object_id)
. Lavoro. Ma è qualcosa da considerare immagino.
Sono arrivato qui per lo stesso problema, ma per un motivo diverso:
Class.objects.get(id=1)
Questo codice generava un'eccezione ImportError. Ciò che mi ha confuso è che il codice seguente è stato eseguito correttamente e ha restituito un set di risultati come previsto:
Class.objects.all()
Coda del traceback per il get()
metodo:
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
Leggendo il codice all'interno di Django loading.py
, sono giunto alla conclusione che il mio settings.py
aveva un brutto percorso verso la mia app che contiene la mia Class
definizione del modello. Tutto quello che dovevo fare era correggere il percorso per l'app e il fileget()
metodo eseguito .
Ecco il mio settings.py
con il percorso corretto:
INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
# ...
'mywebproject.myapp',
)
Tutta la confusione è stata causata perché sto usando ORM di Django come autonomo, quindi lo spazio dei nomi doveva riflettere questo.
Puoi usare:
objects_all=Class.objects.filter(filter_condition="")
Ciò restituirà un set di query anche se ottiene un oggetto. Se hai bisogno di un solo oggetto usa:
obj=Class.objects.get(conditon="")
Puoi anche utilizzare il collegamento get_object_or_404 django. Genera un errore 404 se l'oggetto non viene trovato.
pk
è il modo preferito per fare riferimento alla chiave primaria per qualsiasi modello. Ilid
campo viene generato solo se l'autore del modello non designa specificamente una chiave primaria. Se l'autore ha specificato un campo chiave primaria che non è denominatoid
, non ci sarà unid
campo.