Django, birincil anahtar olarak otomatik olarak bir kimlik alanı oluşturur.
Şimdi nesneyi bu id ile almam gerekiyor.
object = Class.objects.filter()
Bu filtre nasıl yazılır?
Django, birincil anahtar olarak otomatik olarak bir kimlik alanı oluşturur.
Şimdi nesneyi bu id ile almam gerekiyor.
object = Class.objects.filter()
Bu filtre nasıl yazılır?
Yanıtlar:
Bir nesne almak istiyorsanız, kullanmak get()
daha basittir:
obj = Class.objects.get(pk=this_object_id)
id
bir nesnenin kimliğini döndüren yerleşik bir işlevde. Çoğu durumda, bir şeylere atıfta bulunmak id
doğru şeyi yapacaktır, örneğin Class.objects.get(id=this_object_id)
iş. Ama sanırım bu dikkate alınması gereken bir şey.
Buraya aynı problem için geldim, ama farklı bir sebepten:
Class.objects.get(id=1)
Bu kod bir ImportError istisnası yaratıyordu. Kafamı karıştıran şey, aşağıdaki kodun iyi işlemesi ve beklendiği gibi bir sonuç kümesi döndürmesiydi:
Class.objects.all()
Yöntem için geri dönüşün kuyruğu get()
:
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
Django'nun içindeki kodu okurken, model tanımımı içeren uygulamama giden kötü bir yol olduğu loading.py
sonucuna vardım . Tek yapmam gereken, uygulamaya giden yolu düzeltmekti ve yöntem iyi uygulandı.settings.py
Class
get()
İşte settings.py
düzeltilmiş yolum:
INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
# ...
'mywebproject.myapp',
)
Tüm karışıklık, Django'nun ORM'sini bağımsız olarak kullandığım için ortaya çıktı, bu yüzden ad alanının bunu yansıtması gerekiyordu.
Kullanabilirsiniz:
objects_all=Class.objects.filter(filter_condition="")
Bu, bir nesne alsa bile bir sorgu kümesi döndürür. Tam olarak bir nesneye ihtiyacınız varsa kullanın:
obj=Class.objects.get(conditon="")
Get_object_or_404 django kısayolunu da kullanabilirsiniz . Nesne bulunmazsa 404 hatası verir.
Kimliğiniz yoksa, örneğin mysite.com/something/9182301, ile get_object_or_404
içe aktarmayı kullanabilirsiniz from django.shortcuts import get_object_or_404
.
Örnek kullanın:
def myFunc(request, my_pk):
my_var = get_object_or_404(CLASS_NAME, pk=my_pk)
pk
herhangi bir model için birincil anahtara atıfta bulunmanın tercih edilen yolu.id
Model yazar özellikle bir birincil anahtar tayin etmezse alanı sadece oluşturulur. Yazar , adlandırılmamış bir birincil anahtar alanı belirtmişseid
, o zaman birid
alan olmayacaktır .