SORU
10 Mayıs 2009, Pazar


Boş için filtreleme ya da bir queryset BOŞ isimler

Aramak için ihtiyacım olan Adı, Soyadı ve Takma (isteğe bağlı). Yani, benim bir diğer ayarlanmış olan tüm isimleri bir sorguya ihtiyacım var.

Eğer yapabilseydim:

Name.objects.filter(alias!="")

Yukarıdaki karşılığı nedir?

CEVAP
10 Mayıs 2009, Pazar


Bunu yapmak için:

Name.objects.exclude(alias__isnull=True)

Null değerleri dışlamak gerekirveboş dizeler, bunu yapmak için tercih edilen yolu birlikte çok gibi: koşullar zinciri

Name.objects.exclude(alias__isnull=True).exclude(alias__exact='')

Bu yöntemler birlikte temelde her koşul bağımsız olarak denetler zincirleme: yukarıdaki örnekte, alias da boş . bulunduğu satır hariç ^em>ya-boş, boş alias bir saha var Name tüm nesneler, bu yüzden boş bir dize. Oluşturulan SQL gibi görünecektir:

SELECT * FROM Name WHERE alias IS NOT NULL AND alias != ""

Ayrıca karşılayan tek nesneleri sağlayacak exclude, tek bir çağrı birden fazla bağımsız değişkenler iletebilirsinizherdurumu hariç

Name.objects.exclude(some_field=True, other_field=True)

Burada, some_field satırlarveother_field doğru her iki alanda da doğru olmayan tüm satırları böylece dışlanmış. Oluşturulan SQL kodu biraz bu gibi görünecektir:

SELECT * FROM Name WHERE NOT (some_field = TRUE AND other_field = TRUE)

Eğer mantığınız bu daha karmaşık ise, bunun yerine, sadece son çare olarak tavsiye ederim, ancak böyle bir şey, olabilir:

from django.db.models import Q
Name.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))

Daha fazla bilgi için this page ve Django belgeleri this page bkz.

Bir kenara olarak: örnekler gerçek oluşturulan SQL kodu muhtemelen farklı görünecektir sadece bir benzetme ... Benim SQL. Django aslında onları oluşturmak için SQL bakarak işe sorguları nasıl daha derin bir anlayış elde edersiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • lifeisforsharingDT

    lifeisforsha

    18 Mayıs 2011
  • Missouri Star Quilt Company

    Missouri Sta

    18 ŞUBAT 2009
  • steeletraining

    steeletraini

    28 NİSAN 2010